front_processing/extern/TUIO_JAVA/src/com/illposed/osc/utility/OSCPacketDispatcher.java
author bastiena
Thu, 22 Mar 2012 18:15:53 +0100
changeset 9 0f44b7360c8d
parent 0 6fefd4afe506
child 10 925b7ee746e3
permissions -rw-r--r--
Installer updated files charset set to UTF-8 without tabs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
     1
/* $Id: OSCPacketDispatcher.java,v 1.2 2008/07/01 15:29:46 modin Exp $
0
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 {
9
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    25
    private Hashtable<String,OSCListener> addressToClassTable = new Hashtable<String,OSCListener>();
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    26
    
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    27
    /**
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    28
     * 
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    29
     */
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    30
    public OSCPacketDispatcher() {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    31
        super();
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    32
    }
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    33
9
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    34
    public void addListener(String address, OSCListener listener) {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    35
        addressToClassTable.put(address, listener);
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    36
    }
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    37
    
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    38
    public void dispatchPacket(OSCPacket packet) {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    39
        if (packet instanceof OSCBundle)
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    40
            dispatchBundle((OSCBundle) packet);
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    41
        else
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    42
            dispatchMessage((OSCMessage) packet);
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    43
    }
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    44
    
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    45
    public void dispatchPacket(OSCPacket packet, Date timestamp) {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    46
        if (packet instanceof OSCBundle)
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    47
            dispatchBundle((OSCBundle) packet);
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    48
        else
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    49
            dispatchMessage((OSCMessage) packet, timestamp);
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    50
    }
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    51
    
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    52
    private void dispatchBundle(OSCBundle bundle) {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    53
        Date timestamp = bundle.getTimestamp();
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    54
        OSCPacket[] packets = bundle.getPackets();
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    55
        for (int i = 0; i < packets.length; i++) {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    56
            dispatchPacket(packets[i], timestamp);
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    57
        }
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    58
    }
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    59
    
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    60
    private void dispatchMessage(OSCMessage message) {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    61
        dispatchMessage(message, null);
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    62
    }
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    63
    
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    64
    private void dispatchMessage(OSCMessage message, Date time) {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    65
        Enumeration keys = addressToClassTable.keys();
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    66
        while (keys.hasMoreElements()) {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    67
            String key = (String) keys.nextElement();
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    68
            // this supports the OSC regexp facility, but it
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    69
            // only works in JDK 1.4, so don't support it right now
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    70
            // if (key.matches(message.getAddress())) {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    71
            if (key.equals(message.getAddress())) {
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    72
                OSCListener listener = (OSCListener) addressToClassTable.get(key);
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    73
                listener.acceptMessage(time, message);
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    74
            }
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    75
        }
0f44b7360c8d Installer updated
bastiena
parents: 0
diff changeset
    76
    }
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    77
}