diff options
| author | Remko Tronçon <git@el-tramo.be> | 2009-12-31 13:27:52 (GMT) | 
|---|---|---|
| committer | Remko Tronçon <git@el-tramo.be> | 2009-12-31 13:27:52 (GMT) | 
| commit | 152c455e18aae9b613f17bca8bba4a2beafe0228 (patch) | |
| tree | cde533a0bf5dbe014acba3eb2645761ade53dd20 /Swiften/Network/DummyTimerFactory.cpp | |
| parent | 3625bf9f94aad738b6d44da4b8f70c60cd167647 (diff) | |
| download | swift-contrib-152c455e18aae9b613f17bca8bba4a2beafe0228.zip swift-contrib-152c455e18aae9b613f17bca8bba4a2beafe0228.tar.bz2 | |
Added tests for timing out initial connect.
Diffstat (limited to 'Swiften/Network/DummyTimerFactory.cpp')
| -rw-r--r-- | Swiften/Network/DummyTimerFactory.cpp | 57 | 
1 files changed, 57 insertions, 0 deletions
| diff --git a/Swiften/Network/DummyTimerFactory.cpp b/Swiften/Network/DummyTimerFactory.cpp new file mode 100644 index 0000000..72523bb --- /dev/null +++ b/Swiften/Network/DummyTimerFactory.cpp @@ -0,0 +1,57 @@ +#include "Swiften/Network/DummyTimerFactory.h" + +#include <algorithm> + +#include "Swiften/Network/Timer.h" +#include "Swiften/Base/foreach.h" + +namespace Swift { + +class DummyTimerFactory::DummyTimer : public Timer { +	public: +		DummyTimer(int timeout) : timeout(timeout), isRunning(false) { +		} + +		virtual void start() { +			isRunning = true; +		} + +		virtual void stop() { +			isRunning = false; +		} +	 +		int timeout; +		bool isRunning; +}; + + +DummyTimerFactory::DummyTimerFactory() : currentTime(0) { +} + +boost::shared_ptr<Timer> DummyTimerFactory::createTimer(int milliseconds) { +	boost::shared_ptr<DummyTimer> timer(new DummyTimer(milliseconds)); +	timers.push_back(timer); +	return timer; +} + +static bool hasZeroTimeout(boost::shared_ptr<DummyTimerFactory::DummyTimer> timer) { +	return timer->timeout == 0; +} + +void DummyTimerFactory::setTime(int time) { +	assert(time > currentTime); +	int increment = currentTime - time; +	std::vector< boost::shared_ptr<DummyTimer> > notifyTimers(timers.begin(), timers.end()); +	foreach(boost::shared_ptr<DummyTimer> timer, notifyTimers) { +		if (increment >= timer->timeout) { +			if (timer->isRunning) { +				timer->onTick(); +			} +			timer->timeout = 0; +		} +	} +	timers.erase(std::remove_if(timers.begin(), timers.end(), hasZeroTimeout), timers.end()); +	currentTime = time; +} + +} | 
 Swift
 Swift