Skip to content

Commit

Permalink
revising PdListener interface
Browse files Browse the repository at this point in the history
  • Loading branch information
nettoyeurny committed Dec 26, 2011
1 parent 0a8d7cf commit 41ec88b
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 104 deletions.
63 changes: 63 additions & 0 deletions java/org/puredata/core/PdListener.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/**
*
* For information on usage and redistribution, and for a DISCLAIMER OF ALL
* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
*
*/

package org.puredata.core;

/**
*
* PdListener provides an interface for receiving messages from Pd.
*
* @author Peter Brinkmann ([email protected])
*
*/
public interface PdListener {

/**
* Receive bang from Pd
*
* @param source symbol to which the bang was sent
*/
public void receiveBang(String source);

/**
* Receive float from Pd
*
* @param source symbol to which the float was sent
* @param x float value
*/
public void receiveFloat(String source, float x);

public void receiveSymbol(String source, String symbol);

/**
* Receive a list from Pd
*
* @param source symbol to which the list was sent
* @param args elements may be of type Integer, Float, or String
*/
public void receiveList(String source, Object... args);

/**
* Receive a typed message from Pd; e.g., [;foo bar a b c( corresponds to the call receiveMessage("foo", "bar", { "a", "b", "c"});
*
* @param source symbol to which the typed message was sent
* @param symbol
* @param args elements may be of type Integer, Float, or String
*/
public void receiveMessage(String source, String symbol, Object... args);

/**
* Adapter for PdListener implementations that only need to handle a subset of Pd messages
*/
public class Adapter implements PdListener {
@Override public void receiveBang(String source) {}
@Override public void receiveFloat(String source, float x) {}
@Override public void receiveSymbol(String source, String symbol) {}
@Override public void receiveList(String source, Object... args) {}
@Override public void receiveMessage(String source, String symbol, Object... args) {}
}
}
43 changes: 2 additions & 41 deletions java/org/puredata/core/PdReceiver.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* @author Peter Brinkmann ([email protected])
*
*/
public interface PdReceiver {
public interface PdReceiver extends PdListener {

/**
* Print output from Pd print objects
Expand All @@ -23,49 +23,10 @@ public interface PdReceiver {
*/
public void print(String s);

/**
* Receive bang from Pd
*
* @param source symbol to which the bang was sent
*/
public void receiveBang(String source);

/**
* Receive float from Pd
*
* @param source symbol to which the float was sent
* @param x float value
*/
public void receiveFloat(String source, float x);

public void receiveSymbol(String source, String symbol);

/**
* Receive a list from Pd
*
* @param source symbol to which the list was sent
* @param args elements may be of type Integer, Float, or String
*/
public void receiveList(String source, Object... args);

/**
* Receive a typed message from Pd; e.g., [;foo bar a b c( corresponds to the call receiveMessage("foo", "bar", { "a", "b", "c"});
*
* @param source symbol to which the typed message was sent
* @param symbol
* @param args elements may be of type Integer, Float, or String
*/
public void receiveMessage(String source, String symbol, Object... args);

/**
* Adapter for PdReceiver implementations that only need to handle a subset of Pd messages
*/
public static class Adapter implements PdReceiver {
public static class Adapter extends PdListener.Adapter implements PdReceiver {
@Override public void print(String s) {}
@Override public void receiveBang(String source) {}
@Override public void receiveFloat(String source, float x) {}
@Override public void receiveList(String source, Object... args) {}
@Override public void receiveMessage(String source, String symbol, Object... args) {}
@Override public void receiveSymbol(String source, String symbol) {}
}
}
11 changes: 6 additions & 5 deletions java/org/puredata/core/utils/PdDispatcher.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import java.util.Set;

import org.puredata.core.PdBase;
import org.puredata.core.PdListener;
import org.puredata.core.PdReceiver;

/**
Expand Down Expand Up @@ -93,7 +94,7 @@ public synchronized void receiveBang(String source) {
Set<PdListener> selected = listeners.get(source);
if (selected != null) {
for (PdListener listener: selected) {
listener.receiveBang();
listener.receiveBang(source);
}
}
}
Expand All @@ -103,7 +104,7 @@ public synchronized void receiveFloat(String source, float x) {
Set<PdListener> selected = listeners.get(source);
if (selected != null) {
for (PdListener listener: selected) {
listener.receiveFloat(x);
listener.receiveFloat(source, x);
}
}
}
Expand All @@ -113,7 +114,7 @@ public synchronized void receiveSymbol(String source, String symbol) {
Set<PdListener> selected = listeners.get(source);
if (selected != null) {
for (PdListener listener: selected) {
listener.receiveSymbol(symbol);
listener.receiveSymbol(source, symbol);
}
}
}
Expand All @@ -123,7 +124,7 @@ public synchronized void receiveList(String source, Object... args) {
Set<PdListener> selected = listeners.get(source);
if (selected != null) {
for (PdListener listener: selected) {
listener.receiveList(args);
listener.receiveList(source, args);
}
}
}
Expand All @@ -133,7 +134,7 @@ public synchronized void receiveMessage(String source, String symbol, Object...
Set<PdListener> selected = listeners.get(source);
if (selected != null) {
for (PdListener listener: selected) {
listener.receiveMessage(symbol, args);
listener.receiveMessage(source, symbol, args);
}
}
}
Expand Down
46 changes: 0 additions & 46 deletions java/org/puredata/core/utils/PdListener.java

This file was deleted.

25 changes: 13 additions & 12 deletions javatests/org/puredata/core/utils/PdDispatcherTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.junit.Before;
import org.junit.Test;
import org.puredata.core.PdBase;
import org.puredata.core.PdListener;


/**
Expand Down Expand Up @@ -77,16 +78,16 @@ public void testSubscription() {
public void testCallbacks() {
dispatcher.addListener("foo", listener1);
dispatcher.addListener("bar", listener2);
listener1.receiveBang();
listener2.receiveBang();
listener1.receiveFloat(0f);
listener2.receiveFloat(1.5f);
listener1.receiveSymbol("hund");
listener2.receiveSymbol("katze");
listener1.receiveList(0f, "call", 3f, "me", 7f, "ishmael");
listener2.receiveList("test", 1f, 2f);
listener1.receiveMessage("dest", -3f);
listener2.receiveMessage("zzz", "eggs");
listener1.receiveBang("foo");
listener2.receiveBang("bar");
listener1.receiveFloat("foo", 0f);
listener2.receiveFloat("bar", 1.5f);
listener1.receiveSymbol("foo", "hund");
listener2.receiveSymbol("bar", "katze");
listener1.receiveList("foo", 0f, "call", 3f, "me", 7f, "ishmael");
listener2.receiveList("bar", "test", 1f, 2f);
listener1.receiveMessage("foo", "dest", -3f);
listener2.receiveMessage("bar", "zzz", "eggs");
EasyMock.replay(listener1, listener2);
dispatcher.receiveBang("foo");
dispatcher.receiveBang("bar");
Expand All @@ -106,8 +107,8 @@ public void testCallbacks() {
public void testMultipleListeners() {
dispatcher.addListener("spam", listener1);
dispatcher.addListener("spam", listener2);
listener1.receiveBang();
listener2.receiveBang();
listener1.receiveBang("spam");
listener2.receiveBang("spam");
EasyMock.replay(listener1, listener2);
dispatcher.receiveBang("spam");
EasyMock.verify(listener1, listener2);
Expand Down

0 comments on commit 41ec88b

Please sign in to comment.