Task #1290
Updated by Junxiao Shi almost 12 years ago
Create a global instance of `io_service` and `Scheduler`.
namespace nfd {
boost::asio::io_service& getGlobalIoService();
namespace scheduler {
struct EventId;
typedef function<void()> Event;
EventId schedule(time::Duration after, Event event);
void cancel(const EventId& eventId);
} // namespace scheduler
using scheduler::EventId; // import to nfd namespace
} // namespace nfd
The global instances can be replaced/cleared/reset during unit testing.
---
This task is divided to two stages:
## Stage 1
* Create global `io_service` and `Scheduler`.
* `nfd::Scheduler` class still exists. Its global instance is accessed at `nfd::scheduler::getGlobalScheduler()`. `nfd::getGlobalScheduler()`.
* Use the global `io_service` in `main()`.
* Add a zero argument constructor to `Forwarder` which uses the global `Scheduler`.
* Unit tests can still have their own `io_service` and `Scheduler`, if they don't interact with `Forwarder`. `Scheduler`.
## Stage 2
* Delete references to `io_service` and `Scheduler` in all classes and constructors.
* Change all scheduler calls to use `nfd::scheduler::schedule` and `nfd::scheduler::cancel`.
* Delete or move away `nfd::Scheduler` class. Delete `nfd::getGlobalScheduler()` function.
* Unit tests also use the global instances, and are provided a way to reset / replace the global `io_service` and `Scheduler`.