summaryrefslogtreecommitdiff
path: root/src/tesseract/objects/remote/RemoteObjectCommunicator.java
diff options
context:
space:
mode:
authorJesse Morgan <jesse@jesterpm.net>2011-03-17 06:17:12 +0000
committerJesse Morgan <jesse@jesterpm.net>2011-03-17 06:17:12 +0000
commita1ff4ed304654dc15674539556ab23457c2c22cd (patch)
tree221612f0be91c6d04d9263d7716b53fa4ad5a948 /src/tesseract/objects/remote/RemoteObjectCommunicator.java
parent191bccc3d1dfb7ca728df47ae75cfb12fcaee183 (diff)
Remote Control and Fixed the tank.
Diffstat (limited to 'src/tesseract/objects/remote/RemoteObjectCommunicator.java')
-rw-r--r--src/tesseract/objects/remote/RemoteObjectCommunicator.java118
1 files changed, 118 insertions, 0 deletions
diff --git a/src/tesseract/objects/remote/RemoteObjectCommunicator.java b/src/tesseract/objects/remote/RemoteObjectCommunicator.java
new file mode 100644
index 0000000..8c8dc11
--- /dev/null
+++ b/src/tesseract/objects/remote/RemoteObjectCommunicator.java
@@ -0,0 +1,118 @@
+package tesseract.objects.remote;
+
+import java.awt.event.KeyEvent;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.util.HashMap;
+import java.util.UUID;
+
+public class RemoteObjectCommunicator implements Runnable {
+
+ private static final int BASE_PORT = 5551;
+
+ private ServerSocket mySocket;
+
+ private HashMap<UUID, Socket> mySockets;
+
+ private boolean myRunning;
+
+ public RemoteObjectCommunicator() {
+ mySockets = new HashMap<UUID, Socket>();
+ myRunning = false;
+ }
+
+
+ public void run() {
+ int port = BASE_PORT;
+
+ // Find an open port.
+ while (true) {
+ try {
+ mySocket = new ServerSocket(port);
+ myRunning = true;
+ break;
+
+ } catch (IOException e) {
+ port++;
+
+ } catch (Exception e) {
+ System.err.println(e);
+ return;
+ }
+ }
+
+ // Listen for connections
+ while (myRunning) {
+ try {
+ Socket s = mySocket.accept();
+
+ handleNewSocket(s);
+
+ } catch (IOException e) {
+ System.err.println(e);
+ }
+ }
+ }
+
+ public boolean sendKeyToObject(UUID id, KeyEvent event) {
+ Socket s = mySockets.get(id);
+
+ if (s != null && s.isConnected()) {
+ try {
+ DataOutputStream out = new DataOutputStream(s.getOutputStream());
+ out.writeInt(event.getKeyCode());
+ out.flush();
+
+ return true;
+
+ } catch (IOException e) {
+ mySockets.remove(id);
+ // TODO: REMOVE
+ System.out.println(id + " Exception. " + e);
+ return false;
+ }
+
+ } else {
+ // TODO: REMOVE
+ System.out.println(id + " has not called home.");
+ return false;
+ }
+ }
+
+ private void handleNewSocket(final Socket socket) {
+ try {
+ // TODO: Remove
+ System.out.println("New Socket");
+ DataInputStream in = new DataInputStream(socket.getInputStream());
+
+ long msb = in.readLong();
+ long lsb = in.readLong();
+
+ UUID id = new UUID(msb, lsb);
+
+ System.out.println("Id is " + id);
+
+ mySockets.put(id, socket);
+
+ } catch (Exception e) {
+ System.err.println(e);
+ }
+ }
+
+
+ public int getPort() {
+ System.out.print("Blocking for address.");
+ while (mySocket == null) {
+ // Block until we get a socket.
+ System.out.print(".");
+ }
+
+ System.out.println();
+
+ return mySocket.getLocalPort();
+ }
+
+}