diff options
Diffstat (limited to 'src/tesseract/objects/remote/RemoteObjectCommunicator.java')
-rw-r--r-- | src/tesseract/objects/remote/RemoteObjectCommunicator.java | 118 |
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(); + } + +} |