blob: e659a5274faac977f88435084e201c1094f0e093 [file] [log] [blame]
Paul Stewart5f06a0e2012-12-20 11:11:33 -08001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Paul Stewart75897df2011-04-27 09:05:53 -07002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Paul Stewart26b327e2011-10-19 11:38:09 -07005#include "shill/event_dispatcher.h"
Darin Petkov67d8ecf2011-07-26 16:03:30 -07006
Paul Stewart75897df2011-04-27 09:05:53 -07007#include <glib.h>
Alex Vakulenkoa41ab512014-07-23 14:24:23 -07008#include <stdio.h>
Paul Stewart75897df2011-04-27 09:05:53 -07009
Eric Shienbrood3e20a232012-02-16 11:35:56 -050010#include <base/callback.h>
11#include <base/location.h>
Ben Chana0ddf462014-02-06 11:32:42 -080012#include <base/message_loop/message_loop_proxy.h>
Paul Stewart5ad16062013-02-21 18:10:48 -080013#include <base/run_loop.h>
Ben Chana0ddf462014-02-06 11:32:42 -080014#include <base/time/time.h>
Chris Masone0e1d1042011-05-09 18:07:03 -070015
Eric Shienbrood3e20a232012-02-16 11:35:56 -050016using base::Callback;
17using base::Closure;
18
Paul Stewart75897df2011-04-27 09:05:53 -070019namespace shill {
20
Chris Masone0e1d1042011-05-09 18:07:03 -070021EventDispatcher::EventDispatcher()
Ben Chana0ddf462014-02-06 11:32:42 -080022 : dont_use_directly_(new base::MessageLoopForUI),
Peter Qiu37a2b602014-10-27 10:00:43 -070023 message_loop_proxy_(base::MessageLoopProxy::current()),
Peter Qiu40a01482014-10-31 11:54:23 -070024 io_handler_factory_(
25 IOHandlerFactoryContainer::GetInstance()->GetIOHandlerFactory()) {
Chris Masone0e1d1042011-05-09 18:07:03 -070026}
Paul Stewarta43d9232011-05-10 11:40:22 -070027
Chris Masone0e1d1042011-05-09 18:07:03 -070028EventDispatcher::~EventDispatcher() {}
29
30void EventDispatcher::DispatchForever() {
Ben Chana0ddf462014-02-06 11:32:42 -080031 base::MessageLoop::current()->Run();
Chris Masone0e1d1042011-05-09 18:07:03 -070032}
33
Darin Petkov67d8ecf2011-07-26 16:03:30 -070034void EventDispatcher::DispatchPendingEvents() {
Paul Stewart5ad16062013-02-21 18:10:48 -080035 base::RunLoop().RunUntilIdle();
Darin Petkov67d8ecf2011-07-26 16:03:30 -070036}
37
Paul Stewarta794cd62015-06-16 13:13:10 -070038bool EventDispatcher::PostTask(const Closure& task) {
mukesh agrawalf60e4062011-05-27 13:13:41 -070039 return message_loop_proxy_->PostTask(FROM_HERE, task);
Chris Masone0e1d1042011-05-09 18:07:03 -070040}
41
Paul Stewarta794cd62015-06-16 13:13:10 -070042bool EventDispatcher::PostDelayedTask(const Closure& task, int64_t delay_ms) {
Paul Stewart5ad16062013-02-21 18:10:48 -080043 return message_loop_proxy_->PostDelayedTask(
44 FROM_HERE, task, base::TimeDelta::FromMilliseconds(delay_ms));
Chris Masone0e1d1042011-05-09 18:07:03 -070045}
46
Peter Qiu37a2b602014-10-27 10:00:43 -070047// TODO(zqiu): Remove all reference to this function and use the
48// IOHandlerFactory function directly. Delete this function once
49// all references are removed.
Paul Stewarta794cd62015-06-16 13:13:10 -070050IOHandler* EventDispatcher::CreateInputHandler(
Chris Masone0e1d1042011-05-09 18:07:03 -070051 int fd,
Paul Stewarta794cd62015-06-16 13:13:10 -070052 const IOHandler::InputCallback& input_callback,
53 const IOHandler::ErrorCallback& error_callback) {
Peter Qiu37a2b602014-10-27 10:00:43 -070054 return io_handler_factory_->CreateIOInputHandler(
55 fd, input_callback, error_callback);
Paul Stewartf0aae102011-10-19 12:11:44 -070056}
57
Peter Qiu37a2b602014-10-27 10:00:43 -070058// TODO(zqiu): Remove all reference to this function and use the
59// IOHandlerFactory function directly. Delete this function once
60// all references are removed.
Paul Stewarta794cd62015-06-16 13:13:10 -070061IOHandler* EventDispatcher::CreateReadyHandler(
Paul Stewartf0aae102011-10-19 12:11:44 -070062 int fd,
63 IOHandler::ReadyMode mode,
Paul Stewarta794cd62015-06-16 13:13:10 -070064 const Callback<void(int)>& ready_callback) {
Peter Qiu37a2b602014-10-27 10:00:43 -070065 return io_handler_factory_->CreateIOReadyHandler(
66 fd, mode, ready_callback);
Paul Stewarta43d9232011-05-10 11:40:22 -070067}
68
Paul Stewart75897df2011-04-27 09:05:53 -070069} // namespace shill