front_processing/extern/TUIO_JAVA/src/com/illposed/osc/utility/OSCPacketDispatcher.java
author bastiena
Fri, 09 Mar 2012 14:52:11 +0100
changeset 0 6fefd4afe506
child 9 0f44b7360c8d
permissions -rw-r--r--
First Import
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     1
/* $Id: OSCPacketDispatcher.java,v 1.2 2008/07/01 15:29:46 modin Exp $
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     2
 * Created on 28.10.2003
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     3
 */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     4
package com.illposed.osc.utility;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     5
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     6
import com.illposed.osc.*;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     7
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     8
import java.util.Date;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     9
import java.util.Enumeration;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    10
import java.util.Hashtable;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    11
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    12
/**
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    13
 * @author cramakrishnan
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    14
 *
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    15
 * Copyright (C) 2003, C. Ramakrishnan / Auracle
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    16
 * All rights reserved.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    17
 * 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    18
 * See license.txt (or license.rtf) for license information.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    19
 * 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    20
 * Dispatches OSCMessages to registered listeners.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    21
 * 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    22
 */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    23
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    24
public class OSCPacketDispatcher {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    25
	private Hashtable<String,OSCListener> addressToClassTable = new Hashtable<String,OSCListener>();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    26
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    27
	/**
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    28
	 * 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    29
	 */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    30
	public OSCPacketDispatcher() {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    31
		super();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    32
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    33
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    34
	public void addListener(String address, OSCListener listener) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    35
		addressToClassTable.put(address, listener);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    36
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    37
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    38
	public void dispatchPacket(OSCPacket packet) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    39
		if (packet instanceof OSCBundle)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    40
			dispatchBundle((OSCBundle) packet);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    41
		else
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    42
			dispatchMessage((OSCMessage) packet);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    43
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    44
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    45
	public void dispatchPacket(OSCPacket packet, Date timestamp) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    46
		if (packet instanceof OSCBundle)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    47
			dispatchBundle((OSCBundle) packet);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    48
		else
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    49
			dispatchMessage((OSCMessage) packet, timestamp);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    50
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    51
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    52
	private void dispatchBundle(OSCBundle bundle) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    53
		Date timestamp = bundle.getTimestamp();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    54
		OSCPacket[] packets = bundle.getPackets();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    55
		for (int i = 0; i < packets.length; i++) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    56
			dispatchPacket(packets[i], timestamp);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    57
		}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    58
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    59
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    60
	private void dispatchMessage(OSCMessage message) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    61
		dispatchMessage(message, null);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    62
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    63
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    64
	private void dispatchMessage(OSCMessage message, Date time) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    65
		Enumeration keys = addressToClassTable.keys();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    66
		while (keys.hasMoreElements()) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    67
			String key = (String) keys.nextElement();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    68
			// this supports the OSC regexp facility, but it
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    69
			// only works in JDK 1.4, so don't support it right now
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    70
			// if (key.matches(message.getAddress())) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    71
			if (key.equals(message.getAddress())) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    72
				OSCListener listener = (OSCListener) addressToClassTable.get(key);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    73
				listener.acceptMessage(time, message);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    74
			}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    75
		}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    76
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    77
}