diff --git a/src/java/com/threerings/presents/client/util/SafeInterval.java b/src/java/com/threerings/presents/client/util/SafeInterval.java new file mode 100644 index 000000000..dbf19c22c --- /dev/null +++ b/src/java/com/threerings/presents/client/util/SafeInterval.java @@ -0,0 +1,55 @@ +// +// $Id: SafeInterval.java,v 1.1 2002/06/05 02:50:57 mdb Exp $ + +package com.threerings.presents.client.util; + +import com.samskivert.util.Interval; +import com.samskivert.util.IntervalManager; + +import com.threerings.presents.client.Client; + +/** + * Used in conjunction with the {@link Client}, this class provides a + * means by which code can be run on the client main thread at some point + * in the future, either as a recurring interval or as a one shot deal. + * The code is built on top of the {@link IntervalManager} services. + * + *

A {@link SafeInterval} instance should be created and then + * scheduled to run using the {@link IntervalManager}. For example: + * + *

+ *     IntervalManager.register(new SafeInterval(_ctx.getClient()) {
+ *         public void run () {
+ *             System.out.println("Foo!");
+ *         }
+ *      }, 25L * 1000L, null, false);
+ * 
+ */ +public abstract class SafeInterval + implements Runnable, Interval +{ + /** + * Creates a safe interval instance that will queue itself up for + * execution using the supplied client when it expires. + */ + public SafeInterval (Client client) + { + _client = client; + } + + /** + * Called (on the client main thread) when the interval period has + * expired. If this is a recurring interval, this method will be + * called each time the interval expires. + */ + public abstract void run (); + + /** Handles the proper scheduling and queueing. */ + public void intervalExpired (int id, Object arg) + { + _client.getInvoker().invokeLater(this); + } + + /** The client via which we queue ourselves when we expire. */ + protected Client _client; +}