front_processing/extern/TUIO_JAVA/src/com/illposed/osc/OSCPortIn.java
author bastiena
Tue, 20 Mar 2012 18:00:55 +0100
changeset 7 8a21bec5d45f
parent 0 6fefd4afe506
child 9 0f44b7360c8d
permissions -rw-r--r--
Middleware : No proximity bugs anymore. The skeleton disappear if a tracked person is too close or not tracked anymore. Processing : There are no laggs anymore when an user stay too long moving his hands and drawing tons of ellipses. (TUIO Cursors are not taken by their vectors, only the last position of the cursors are caught to be drawn).
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     1
/**
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     2
 * @author cramakrishnan
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     3
 *
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     4
 * Copyright (C) 2004, C. Ramakrishnan / Illposed Software
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     5
 * All rights reserved.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     6
 * 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     7
 * See license.txt (or license.rtf) for license information.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     8
 * 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     9
 * 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    10
 * OSCPortIn is the class that listens for OSC messages.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    11
 *	 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    12
 * To receive OSC, you need to construct the OSCPort with a 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    13
 *
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    14
 * An example based on com.illposed.osc.test.OSCPortTest::testReceiving() :
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    15
 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    16
		receiver = new OSCPort(OSCPort.defaultSCOSCPort());
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    17
		OSCListener listener = new OSCListener() {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    18
			public void acceptMessage(java.util.Date time, OSCMessage message) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    19
				System.out.println("Message received!");
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    20
			}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    21
		};
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    22
		receiver.addListener("/message/receiving", listener);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    23
		receiver.startListening();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    24
		
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    25
 * Then, using a program such as SuperCollider or sendOSC, send a message
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    26
 * to this computer, port 57110 (defaultSCOSCPort), with the address /message/receiving
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    27
 */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    28
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    29
package com.illposed.osc;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    30
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    31
import java.net.*;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    32
import java.io.IOException;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    33
import com.illposed.osc.utility.OSCByteArrayToJavaConverter;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    34
import com.illposed.osc.utility.OSCPacketDispatcher;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    35
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    36
public class OSCPortIn extends OSCPort implements Runnable {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    37
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    38
	// state for listening
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    39
	protected boolean isListening;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    40
	protected OSCByteArrayToJavaConverter converter = new OSCByteArrayToJavaConverter();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    41
	protected OSCPacketDispatcher dispatcher = new OSCPacketDispatcher();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    42
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    43
	/**
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    44
	 * Create an OSCPort that listens on port
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    45
	 * @param port
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    46
	 * @throws SocketException
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    47
	 */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    48
	public OSCPortIn(int port) throws SocketException {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    49
		socket = new DatagramSocket(port);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    50
		this.port = port;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    51
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    52
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    53
	/**
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    54
	 * @see java.lang.Runnable#run()
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    55
	 */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    56
	public void run() {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    57
		//maximum UDP packet size
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    58
		byte[] buffer = new byte[65536];
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    59
		DatagramPacket packet = new DatagramPacket(buffer, 65536);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    60
		while (isListening) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    61
			try {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    62
				packet.setLength(65536);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    63
				socket.receive(packet);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    64
				OSCPacket oscPacket = converter.convert(buffer, packet.getLength());
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    65
				dispatcher.dispatchPacket(oscPacket);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    66
			} catch (java.net.SocketException e) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    67
				if (isListening) e.printStackTrace();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    68
			} catch (IOException e) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    69
				if (isListening) e.printStackTrace();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    70
			} 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    71
		}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    72
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    73
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    74
	/**
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    75
	 * Start listening for incoming OSCPackets
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    76
	 */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    77
	public void startListening() {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    78
		isListening = true;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    79
		Thread thread = new Thread(this);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    80
		thread.start();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    81
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    82
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    83
	/**
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    84
	 * Stop listening for incoming OSCPackets
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    85
	 */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    86
	public void stopListening() {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    87
		isListening = false;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    88
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    89
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    90
	/**
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    91
	 * Am I listening for packets?
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    92
	 */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    93
	public boolean isListening() {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    94
		return isListening;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    95
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    96
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    97
	/**
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    98
	 * Register the listener for incoming OSCPackets addressed to an Address
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    99
	 * @param anAddress  the address to listen for
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   100
	 * @param listener   the object to invoke when a message comes in
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   101
	 */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   102
	public void addListener(String anAddress, OSCListener listener) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   103
		dispatcher.addListener(anAddress, listener);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   104
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   105
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   106
	/**
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   107
	 * Close the socket and free-up resources. It's recommended that clients call
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   108
	 * this when they are done with the port.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   109
	 */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   110
	public void close() {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   111
		socket.close();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   112
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   113
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   114
}