Simple, type-safe event dispatching for Java a la as3-signals
Java
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
src
.gitignore
LICENSE
README.md
bootstrap.xml
build.xml
pom.xml

README.md

This is a Java reinterpretation of Robert Penner's as3-signals. It keeps the simple event declaration and dispatching, while adding a dash of type-safety afforded by Java's generics.

Usage

Using a signal is a 3 step process. First, create a signal on the class that will be firing events:

public class Dispatcher {
    /** Dispatches the old value and the new value after it changes. */
    public final Signal2<String, String> onChanged = Signals.newSignal2();
}

Then, add listeners to that signal as appropriate:

public class InterestedParty {
    public void connectToDispatcher (Dispatcher d)
    {
        d.onChanged.add(new Listener1<String>() {
            public void apply (String oldValue) {
                System.out.println("Dispatcher changed from " + oldValue);
            }});
    }
}

or

d.onChanged.add(new Listener0() {
    public void apply () {
        System.out.println("I'll only be called for one dispatch!");
    }
    }).once();

if the listener only wants to receive the next dispatch.

Finally, dispatch that signal when the event occurs:

onChanged.dispatch("oldValue", "newValue");

That'll call apply on all the added listeners.

If a listener is no longer interested in a signal, it can be removed from the signal, or Connection.disconnect can be called.

Connecting, disconnecting, and dispatching is thread-safe. After Signal.disconnect(Listener) or Connection.disconnect returns, a listener is guaranteed to never receive another call to its apply method.

Getting

The 0.3 release of signals is available via Maven Central. Just add this to your POM:

<dependency>
  <groupId>com.threerings</groupId>
  <artifactId>signals</artifactId>
  <version>0.3</version>
</dependency>

You can also download it directly from Maven Central.