front_processing/extern/TUIO_PROCESSING/src/TUIO/TuioProcessing.java
author bastiena
Tue, 20 Mar 2012 18:00:55 +0100
changeset 7 8a21bec5d45f
parent 4 f4e52a4c34b3
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).

/*
	TUIO processing library - part of the reacTIVision project
	http://reactivision.sourceforge.net/

	Copyright (c) 2005-2009 Martin Kaltenbrunner <mkalten@iua.upf.edu>

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

package TUIO;

import java.awt.event.*;
import java.lang.reflect.*;
import processing.core.*;
import java.util.*;

public class TuioProcessing implements TuioListener {
		
	private PApplet parent;
	private Method addTuioObject, removeTuioObject, updateTuioObject, addTuioCursor, removeTuioCursor, updateTuioCursor, addTuioString, removeTuioString, updateTuioString, refresh;
	private TuioClient client;
			
	public TuioProcessing(PApplet parent) {
		this(parent,3333);
	}
	
	public TuioProcessing(PApplet parent, int port) {
		this.parent = parent;
		parent.registerDispose(this);
		
		try { refresh = parent.getClass().getMethod("refresh",new Class[] { TuioTime.class } ); }
		catch (Exception e) { 
			System.out.println("TUIO: missing or wrong 'refresh(TuioTime bundleTime)' method implementation");
			refresh = null;
		}
		
		try { addTuioObject = parent.getClass().getMethod("addTuioObject", new Class[] { TuioObject.class }); }
		catch (Exception e) { 
			System.out.println("TUIO: missing or wrong 'addTuioObject(TuioObject tobj)' method implementation");
			addTuioObject = null;
		}
		
		try { removeTuioObject = parent.getClass().getMethod("removeTuioObject", new Class[] { TuioObject.class }); }
		catch (Exception e) { 
			System.out.println("TUIO: missing or wrong 'removeTuioObject(TuioObject tobj)' method implementation");
			removeTuioObject = null;
		}
		
		try { updateTuioObject = parent.getClass().getMethod("updateTuioObject", new Class[] { TuioObject.class }); }
		catch (Exception e) { 
			System.out.println("TUIO: missing or wrong 'updateTuioObject(TuioObject tobj)' method implementation");
			updateTuioObject = null;
		}
		
		try { addTuioCursor = parent.getClass().getMethod("addTuioCursor", new Class[] { TuioCursor.class }); }
		catch (Exception e) { 
			System.out.println("TUIO: missing or wrong 'addTuioCursor(TuioCursor tcur)' method implementation");
			addTuioCursor = null;
		}
		
		try { removeTuioCursor = parent.getClass().getMethod("removeTuioCursor", new Class[] { TuioCursor.class }); }
		catch (Exception e) { 
			System.out.println("TUIO:missing or wrong 'removeTuioCursor(TuioCursor tcur)' method implementation");
			removeTuioCursor = null;
		}
		
		try { updateTuioCursor = parent.getClass().getMethod("updateTuioCursor", new Class[] { TuioCursor.class }); }
		catch (Exception e) { 
			System.out.println("TUIO: missing or wrong 'updateTuioCursor(TuioCursor tcur)' method implementation");
			updateTuioCursor = null;
		}
		
		try { addTuioString = parent.getClass().getMethod("addTuioString", new Class[] { TuioString.class }); }
		catch (Exception e) { 
			System.out.println("TUIO: missing or wrong 'addTuioString(TuioString tstr)' method implementation");
			addTuioString = null;
		}
		
		try { removeTuioString = parent.getClass().getMethod("removeTuioString", new Class[] { TuioString.class }); }
		catch (Exception e) { 
			System.out.println("TUIO:missing or wrong 'removeTuioString(TuioString tstr)' method implementation");
			removeTuioString = null;
		}
		
		try { updateTuioString = parent.getClass().getMethod("updateTuioString", new Class[] { TuioString.class }); }
		catch (Exception e) { 
			System.out.println("TUIO: missing or wrong 'updateTuioString(TuioString tstr)' method implementation");
			updateTuioString = null;
		}
		
		client = new TuioClient(port);
		client.addTuioListener(this);
		client.connect();
	}

	public void addTuioObject(TuioObject tobj) {
		if (addTuioObject!=null) {
			try { 
				addTuioObject.invoke(parent, new Object[] { tobj });
			}
			catch (IllegalAccessException e) {}
			catch (IllegalArgumentException e) {}
			catch (InvocationTargetException e) {}
		}
	}
	
	public void updateTuioObject(TuioObject tobj) {
		
		if (updateTuioObject!=null) {
			try { 
				updateTuioObject.invoke(parent, new Object[] { tobj });
			}
			catch (IllegalAccessException e) {}
			catch (IllegalArgumentException e) {}
			catch (InvocationTargetException e) {}
		}
	}
	
	public void removeTuioObject(TuioObject tobj) {
		if (removeTuioObject!=null) {
			try { 
				removeTuioObject.invoke(parent, new Object[] { tobj });
			}
			catch (IllegalAccessException e) {}
			catch (IllegalArgumentException e) {}
			catch (InvocationTargetException e) {}
		}
	}
	
	public void addTuioCursor(TuioCursor tcur) {
		if (addTuioCursor!=null) {
			try { 
				addTuioCursor.invoke(parent, new Object[] { tcur });
			}
			catch (IllegalAccessException e) {}
			catch (IllegalArgumentException e) {}
			catch (InvocationTargetException e) {}
		}
	}
	
	public void updateTuioCursor(TuioCursor tcur) {
		if (updateTuioCursor!=null) {
			try { 
				updateTuioCursor.invoke(parent, new Object[] { tcur });
			}
			catch (IllegalAccessException e) {}
			catch (IllegalArgumentException e) {}
			catch (InvocationTargetException e) {}
		}
	}
	
	public void removeTuioCursor(TuioCursor tcur) {
		if (removeTuioCursor!=null) {
			try { 
				removeTuioCursor.invoke(parent, new Object[] { tcur });
			}
			catch (IllegalAccessException e) {}
			catch (IllegalArgumentException e) {}
			catch (InvocationTargetException e) {}
		}
	}
	
	public void addTuioString(TuioString tstr) {
		if (addTuioString!=null) {
			try { 
				addTuioString.invoke(parent, new Object[] { tstr });
			}
			catch (IllegalAccessException e) {}
			catch (IllegalArgumentException e) {}
			catch (InvocationTargetException e) {}
		}
	}
	
	public void updateTuioString(TuioString tstr) {
		if (updateTuioString!=null) {
			try { 
				updateTuioString.invoke(parent, new Object[] { tstr });
			}
			catch (IllegalAccessException e) {}
			catch (IllegalArgumentException e) {}
			catch (InvocationTargetException e) {}
		}
	}
	
	public void removeTuioString(TuioString tstr) {
		if (removeTuioString!=null) {
			try { 
				removeTuioString.invoke(parent, new Object[] { tstr });
			}
			catch (IllegalAccessException e) {}
			catch (IllegalArgumentException e) {}
			catch (InvocationTargetException e) {}
		}
	}
	
	public void refresh(TuioTime bundleTime) {
		if (refresh!=null) {
			try { 
				refresh.invoke(parent,new Object[] { bundleTime });
			}
			catch (IllegalAccessException e) {}
			catch (IllegalArgumentException e) {}
			catch (InvocationTargetException e) {}
		}
	}
	
	public Vector getTuioObjects() {
		return client.getTuioObjects();
	}
	
	public Vector getTuioCursors() {
		return client.getTuioCursors();
	}
	
	public Vector getTuioStrings() {
		return client.getTuioStrings();
	}
	
	public TuioObject getTuioObject(long s_id) {
		return client.getTuioObject(s_id);
	}
	
	public TuioCursor getTuioCursor(long s_id) {
		return client.getTuioCursor(s_id);
	}
	
	public TuioString getTuioString(long s_id) {
		return client.getTuioString(s_id);
	}
		
	public void pre() {
		//method that's called just after beginFrame(), meaning that it 
		//can affect drawing.
	}

	public void draw() {
		//method that's called at the end of draw(), but before endFrame().
	}
	
	public void mouseEvent(MouseEvent e) {
		//called when a mouse event occurs in the parent applet
	}
	
	public void keyEvent(KeyEvent e) {
		//called when a key event occurs in the parent applet
	}
	
	public void post() {
		//method called after draw has completed and the frame is done.
		//no drawing allowed.
	}
	
	public void size(int width, int height) {
		//this will be called the first time an applet sets its size, but
		//also any time that it's called while the PApplet is running.
	}
	
	public void stop() {
		//can be called by users, for instance movie.stop() will shut down
		//a movie that's being played, or camera.stop() stops capturing 
		//video. server.stop() will shut down the server and shut it down
		//completely, which is identical to its "dispose" function.
	}
	
	public void dispose() {
	
		if (client.isConnected()) client.disconnect();
	
		//this should only be called by PApplet. dispose() is what gets 
		//called when the host applet is stopped, so this should shut down
		//any threads, disconnect from the net, unload memory, etc. 
	}
}