module dast.async.timer.iocp;

version (Windows)  : import core.time,
dast.async.core,
dast.async.timer.common,
std.datetime;

class TimerBase : Timer {
	this() {
		_timer = new KissWheelTimer;
		_timer.timeout = (Object) {
			_timer.rest(wheelSize);
			//onRead();
		};
	}

	// override void start(bool immediately = false, bool once = false) {
	// 	setTimerOut();
	// 	super.start(immediately, once);
	// }

	override void stop() {
		_timer.stop();
		super.stop();
	}

	bool setTimerOut() {
		if (!_interval)
			return false;
		_interval = _interval > 20 ? _interval : 20;
		auto size = _interval / CustomTimerMinTimeout;
		const superfluous = _interval % CustomTimerMinTimeout;
		size += superfluous > CustomTimerNextTimeout ? 1 : 0;
		size = size > 0 ? size : 1;
		_wheelSize = cast(uint)size;
		_circle = _wheelSize / CustomTimerWheelSize;
		return true;
	}

	@property KissWheelTimer timer() pure => _timer;

	private KissWheelTimer _timer;
}