summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2011-07-01 09:19:49 (GMT)
committerKevin Smith <git@kismith.co.uk>2011-07-01 09:19:49 (GMT)
commit2da71a8a85486a494343f1662d64fb5ae5a2a44e (patch)
tree23992f9f2a00bac23b345e5c2cc9c1194efc25be /src/com/isode/stroke/network/JavaTimer.java
downloadstroke-2da71a8a85486a494343f1662d64fb5ae5a2a44e.zip
stroke-2da71a8a85486a494343f1662d64fb5ae5a2a44e.tar.bz2
Initial import
Diffstat (limited to 'src/com/isode/stroke/network/JavaTimer.java')
-rw-r--r--src/com/isode/stroke/network/JavaTimer.java72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/com/isode/stroke/network/JavaTimer.java b/src/com/isode/stroke/network/JavaTimer.java
new file mode 100644
index 0000000..61357d4
--- /dev/null
+++ b/src/com/isode/stroke/network/JavaTimer.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2010 Remko Tron¨on
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+/*
+ * Copyright (c) 2010, Isode Limited, London, England.
+ * All rights reserved.
+ */
+package com.isode.stroke.network;
+
+import com.isode.stroke.eventloop.Event;
+import com.isode.stroke.eventloop.EventLoop;
+
+class JavaTimer extends Timer {
+
+ private class TimerRunnable implements Runnable {
+
+ boolean running_ = true;
+ private final EventLoop eventLoop_;
+ private final int milliseconds_;
+
+ public TimerRunnable(EventLoop eventLoop, int milliseconds) {
+ eventLoop_ = eventLoop;
+ milliseconds_ = milliseconds;
+ }
+
+ public void run() {
+ while (shouldEmit()) {
+ try {
+ Thread.sleep(milliseconds_);
+ } catch (InterruptedException ex) {
+ /* If we were interrupted, either emit or don't, based on whether stop was called.*/
+ }
+ if (shouldEmit()) {
+ eventLoop_.postEvent(new Event.Callback() {
+ public void run() {
+ onTick.emit();
+ }
+ });
+ }
+ }
+ }
+
+
+ synchronized boolean shouldEmit() {
+ return running_;
+ }
+
+ public synchronized void stop() {
+ running_ = false;
+ }
+ }
+
+ public JavaTimer(EventLoop eventLoop, int milliseconds) {
+ timer_ = new TimerRunnable(eventLoop, milliseconds);
+ }
+
+ @Override
+ public void start() {
+ Thread thread = (new Thread(timer_));
+ thread.setDaemon(true);
+ thread.start();
+ }
+
+ @Override
+ public void stop() {
+ timer_.stop();
+ //FIXME: This needs to clear any remaining events out of the EventLoop queue.
+ }
+ private final TimerRunnable timer_;
+}