/* * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #pragma once #include #include #include #include #include #include #include #include namespace Swift { class EventLoop; class SWIFTEN_API BoostTimer : public Timer, public EventOwner, public std::enable_shared_from_this { public: typedef std::shared_ptr ref; virtual ~BoostTimer(); static ref create(int milliseconds, std::shared_ptr service, EventLoop* eventLoop) { return ref(new BoostTimer(milliseconds, service, eventLoop)); } virtual void start(); virtual void stop(); private: BoostTimer(int milliseconds, std::shared_ptr service, EventLoop* eventLoop); void handleTimerTick(const boost::system::error_code& error); private: int timeout; std::shared_ptr ioService; boost::scoped_ptr timer; std::mutex timerMutex; EventLoop* eventLoop; bool shuttingDown; }; }