// Copyright 2018 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SHILL_EVENT_DISPATCHER_H_
#define SHILL_EVENT_DISPATCHER_H_

#include <stdint.h>

#include <base/callback.h>
#include <base/location.h>
#include <base/macros.h>

namespace shill {

// This is the main event dispatcher.  It contains a central instance, and is
// the entity responsible for dispatching events out of all queues to their
// listeners during the idle loop.
class EventDispatcher {
 public:
  EventDispatcher();
  EventDispatcher(const EventDispatcher&) = delete;
  EventDispatcher& operator=(const EventDispatcher&) = delete;

  virtual ~EventDispatcher();

  virtual void DispatchForever();

  // Processes all pending events that can run and returns.
  virtual void DispatchPendingEvents();

  // These are thin wrappers around calls of the same name in
  // <base/task_runner.h>
  void PostTask(const base::Location& location, base::OnceClosure task);
  virtual void PostDelayedTask(const base::Location& location,
                               base::OnceClosure task,
                               int64_t delay_ms);

  virtual void QuitDispatchForever();

 private:
  base::RepeatingClosure quit_closure_;
};

}  // namespace shill

#endif  // SHILL_EVENT_DISPATCHER_H_
