processing.mode.java.tweak.TweakClient Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of java-mode Show documentation
Show all versions of java-mode Show documentation
Processing is a programming language, development environment, and online community.
This Java Mode package contains the Java mode for Processing IDE.
/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */
/*
Part of the Processing project - http://processing.org
Copyright (c) 2012-15 The Processing Foundation
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2
as published by the Free Software Foundation.
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.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package processing.mode.java.tweak;
import java.net.*;
import java.nio.ByteBuffer;
public class TweakClient {
private DatagramSocket socket;
private InetAddress address;
private boolean initialized;
private int sketchPort;
static final int VAR_INT = 0;
static final int VAR_FLOAT = 1;
static final int SHUTDOWN = 0xffffffff;
public TweakClient(int sketchPort) {
this.sketchPort = sketchPort;
try {
socket = new DatagramSocket();
// only local sketch is allowed
address = InetAddress.getByName("127.0.0.1");
initialized = true;
} catch (SocketException e) {
initialized = false;
} catch (UnknownHostException e) {
socket.close();
initialized = false;
} catch (SecurityException e) {
socket.close();
initialized = false;
}
}
public void shutdown() {
if (initialized) {
// send shutdown to the sketch
sendShutdown();
initialized = false;
}
}
public boolean sendInt(int index, int val) {
if (initialized) {
try {
byte[] buf = new byte[12];
ByteBuffer bb = ByteBuffer.wrap(buf);
bb.putInt(0, VAR_INT);
bb.putInt(4, index);
bb.putInt(8, val);
DatagramPacket packet = new DatagramPacket(buf, buf.length, address, sketchPort);
socket.send(packet);
return true;
} catch (Exception e) { }
}
return false;
}
public boolean sendFloat(int index, float val) {
if (initialized) {
try {
byte[] buf = new byte[12];
ByteBuffer bb = ByteBuffer.wrap(buf);
bb.putInt(0, VAR_FLOAT);
bb.putInt(4, index);
bb.putFloat(8, val);
socket.send(new DatagramPacket(buf, buf.length, address, sketchPort));
return true;
} catch (Exception e) { }
}
return false;
}
public boolean sendShutdown() {
if (initialized) {
try {
byte[] buf = new byte[12];
ByteBuffer bb = ByteBuffer.wrap(buf);
bb.putInt(0, SHUTDOWN);
socket.send(new DatagramPacket(buf, buf.length, address, sketchPort));
return true;
} catch (Exception e) { }
}
return false;
}
static public String getServerCode(int listenPort,
boolean hasInts, boolean hasFloats) {
String serverCode = ""+
"class TweakModeServer extends Thread\n"+
"{\n"+
" protected DatagramSocket socket = null;\n"+
" protected boolean running = true;\n"+
" final int INT_VAR = 0;\n"+
" final int FLOAT_VAR = 1;\n"+
" final int SHUTDOWN = 0xffffffff;\n"+
" public TweakModeServer() {\n"+
" this(\"TweakModeServer\");\n"+
" }\n"+
" public TweakModeServer(String name) {\n"+
" super(name);\n"+
" }\n"+
" public void setup()\n"+
" {\n"+
" try {\n"+
" socket = new DatagramSocket("+listenPort+");\n"+
" socket.setSoTimeout(250);\n"+
" } catch (IOException e) {\n"+
" println(\"error: could not create TweakMode server socket\");\n"+
" }\n"+
" }\n"+
" public void run()\n"+
" {\n"+
" byte[] buf = new byte[256];\n"+
" while(running)\n"+
" {\n"+
" try {\n"+
" DatagramPacket packet = new DatagramPacket(buf, buf.length);\n"+
" socket.receive(packet);\n"+
" ByteBuffer bb = ByteBuffer.wrap(buf);\n"+
" int type = bb.getInt(0);\n"+
" int index = bb.getInt(4);\n";
if (hasInts) {
serverCode +=
" if (type == INT_VAR) {\n"+
" int val = bb.getInt(8);\n"+
" tweakmode_int[index] = val;\n"+
" }\n"+
" else ";
}
if (hasFloats) {
serverCode +=
" if (type == FLOAT_VAR) {\n"+
" float val = bb.getFloat(8);\n"+
" tweakmode_float[index] = val;\n"+
" }\n"+
" else";
}
serverCode +=
" if (type == SHUTDOWN) {\n"+
" running = false;\n"+
" }\n"+
" } catch (SocketTimeoutException e) {\n"+
" // nothing to do here just try receiving again\n"+
" } catch (Exception e) {\n"+
" }\n"+
" }\n"+
" socket.close();\n"+
" }\n"+
"}\n\n\n";
return serverCode;
}
}