20 * Dispatches OSCMessages to registered listeners. |
20 * Dispatches OSCMessages to registered listeners. |
21 * |
21 * |
22 */ |
22 */ |
23 |
23 |
24 public class OSCPacketDispatcher { |
24 public class OSCPacketDispatcher { |
25 private Hashtable<String,OSCListener> addressToClassTable = new Hashtable<String,OSCListener>(); |
25 private Hashtable<String,OSCListener> addressToClassTable = new Hashtable<String,OSCListener>(); |
26 |
26 |
27 /** |
27 /** |
28 * |
28 * |
29 */ |
29 */ |
30 public OSCPacketDispatcher() { |
30 public OSCPacketDispatcher() { |
31 super(); |
31 super(); |
32 } |
32 } |
33 |
33 |
34 public void addListener(String address, OSCListener listener) { |
34 public void addListener(String address, OSCListener listener) { |
35 addressToClassTable.put(address, listener); |
35 addressToClassTable.put(address, listener); |
36 } |
36 } |
37 |
37 |
38 public void dispatchPacket(OSCPacket packet) { |
38 public void dispatchPacket(OSCPacket packet) { |
39 if (packet instanceof OSCBundle) |
39 if (packet instanceof OSCBundle) |
40 dispatchBundle((OSCBundle) packet); |
40 dispatchBundle((OSCBundle) packet); |
41 else |
41 else |
42 dispatchMessage((OSCMessage) packet); |
42 dispatchMessage((OSCMessage) packet); |
43 } |
43 } |
44 |
44 |
45 public void dispatchPacket(OSCPacket packet, Date timestamp) { |
45 public void dispatchPacket(OSCPacket packet, Date timestamp) { |
46 if (packet instanceof OSCBundle) |
46 if (packet instanceof OSCBundle) |
47 dispatchBundle((OSCBundle) packet); |
47 dispatchBundle((OSCBundle) packet); |
48 else |
48 else |
49 dispatchMessage((OSCMessage) packet, timestamp); |
49 dispatchMessage((OSCMessage) packet, timestamp); |
50 } |
50 } |
51 |
51 |
52 private void dispatchBundle(OSCBundle bundle) { |
52 private void dispatchBundle(OSCBundle bundle) { |
53 Date timestamp = bundle.getTimestamp(); |
53 Date timestamp = bundle.getTimestamp(); |
54 OSCPacket[] packets = bundle.getPackets(); |
54 OSCPacket[] packets = bundle.getPackets(); |
55 for (int i = 0; i < packets.length; i++) { |
55 for (int i = 0; i < packets.length; i++) { |
56 dispatchPacket(packets[i], timestamp); |
56 dispatchPacket(packets[i], timestamp); |
57 } |
57 } |
58 } |
58 } |
59 |
59 |
60 private void dispatchMessage(OSCMessage message) { |
60 private void dispatchMessage(OSCMessage message) { |
61 dispatchMessage(message, null); |
61 dispatchMessage(message, null); |
62 } |
62 } |
63 |
63 |
64 private void dispatchMessage(OSCMessage message, Date time) { |
64 private void dispatchMessage(OSCMessage message, Date time) { |
65 Enumeration keys = addressToClassTable.keys(); |
65 Enumeration keys = addressToClassTable.keys(); |
66 while (keys.hasMoreElements()) { |
66 while (keys.hasMoreElements()) { |
67 String key = (String) keys.nextElement(); |
67 String key = (String) keys.nextElement(); |
68 // this supports the OSC regexp facility, but it |
68 // this supports the OSC regexp facility, but it |
69 // only works in JDK 1.4, so don't support it right now |
69 // only works in JDK 1.4, so don't support it right now |
70 // if (key.matches(message.getAddress())) { |
70 // if (key.matches(message.getAddress())) { |
71 if (key.equals(message.getAddress())) { |
71 if (key.equals(message.getAddress())) { |
72 OSCListener listener = (OSCListener) addressToClassTable.get(key); |
72 OSCListener listener = (OSCListener) addressToClassTable.get(key); |
73 listener.acceptMessage(time, message); |
73 listener.acceptMessage(time, message); |
74 } |
74 } |
75 } |
75 } |
76 } |
76 } |
77 } |
77 } |