blob: 6c76c1b8fd3eaeb75c04f6a961b4e130ab1019dc [file] [log] [blame]
Paul Stewart75897df2011-04-27 09:05:53 -07001// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
2// 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 <stdio.h>
8#include <glib.h>
9
Chris Masone487b8bf2011-05-13 16:27:57 -070010#include <base/callback_old.h>
Chris Masone0e1d1042011-05-09 18:07:03 -070011#include <base/message_loop_proxy.h>
12
Paul Stewartf0aae102011-10-19 12:11:44 -070013#include "shill/glib_io_input_handler.h"
14#include "shill/glib_io_ready_handler.h"
Paul Stewart75897df2011-04-27 09:05:53 -070015
16namespace shill {
17
Chris Masone0e1d1042011-05-09 18:07:03 -070018EventDispatcher::EventDispatcher()
19 : dont_use_directly_(new MessageLoopForUI),
20 message_loop_proxy_(base::MessageLoopProxy::CreateForCurrentThread()) {
21}
Paul Stewarta43d9232011-05-10 11:40:22 -070022
Chris Masone0e1d1042011-05-09 18:07:03 -070023EventDispatcher::~EventDispatcher() {}
24
25void EventDispatcher::DispatchForever() {
26 MessageLoop::current()->Run();
27}
28
Darin Petkov67d8ecf2011-07-26 16:03:30 -070029void EventDispatcher::DispatchPendingEvents() {
30 MessageLoop::current()->RunAllPending();
31}
32
33bool EventDispatcher::PostTask(Task *task) {
mukesh agrawalf60e4062011-05-27 13:13:41 -070034 return message_loop_proxy_->PostTask(FROM_HERE, task);
Chris Masone0e1d1042011-05-09 18:07:03 -070035}
36
Darin Petkov67d8ecf2011-07-26 16:03:30 -070037bool EventDispatcher::PostDelayedTask(Task *task, int64 delay_ms) {
mukesh agrawalf60e4062011-05-27 13:13:41 -070038 return message_loop_proxy_->PostDelayedTask(FROM_HERE, task, delay_ms);
Chris Masone0e1d1042011-05-09 18:07:03 -070039}
40
Paul Stewart26b327e2011-10-19 11:38:09 -070041IOHandler *EventDispatcher::CreateInputHandler(
Chris Masone0e1d1042011-05-09 18:07:03 -070042 int fd,
Darin Petkov67d8ecf2011-07-26 16:03:30 -070043 Callback1<InputData *>::Type *callback) {
Paul Stewartf0aae102011-10-19 12:11:44 -070044 IOHandler *handler = new GlibIOInputHandler(fd, callback);
45 handler->Start();
46 return handler;
47}
48
49IOHandler *EventDispatcher::CreateReadyHandler(
50 int fd,
51 IOHandler::ReadyMode mode,
52 Callback1<int>::Type *callback) {
53 IOHandler *handler = new GlibIOReadyHandler(fd, mode, callback);
54 handler->Start();
55 return handler;
Paul Stewarta43d9232011-05-10 11:40:22 -070056}
57
Paul Stewart75897df2011-04-27 09:05:53 -070058} // namespace shill