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