front_processing/extern/TUIO_JAVA/src/com/illposed/osc/OSCPortIn.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
/**
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
}