diff options
author | Jesse Morgan <jesse@jesterpm.net> | 2011-03-17 06:17:12 +0000 |
---|---|---|
committer | Jesse Morgan <jesse@jesterpm.net> | 2011-03-17 06:17:12 +0000 |
commit | a1ff4ed304654dc15674539556ab23457c2c22cd (patch) | |
tree | 221612f0be91c6d04d9263d7716b53fa4ad5a948 /src/tesseract/objects/remote/RemoteObject.java | |
parent | 191bccc3d1dfb7ca728df47ae75cfb12fcaee183 (diff) |
Remote Control and Fixed the tank.
Diffstat (limited to 'src/tesseract/objects/remote/RemoteObject.java')
-rw-r--r-- | src/tesseract/objects/remote/RemoteObject.java | 122 |
1 files changed, 116 insertions, 6 deletions
diff --git a/src/tesseract/objects/remote/RemoteObject.java b/src/tesseract/objects/remote/RemoteObject.java index e3edc1c..32f5a11 100644 --- a/src/tesseract/objects/remote/RemoteObject.java +++ b/src/tesseract/objects/remote/RemoteObject.java @@ -1,6 +1,14 @@ package tesseract.objects.remote; import java.awt.event.KeyEvent; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.net.Socket; +import java.net.SocketAddress; +import java.util.UUID; import javax.vecmath.Vector3f; @@ -22,16 +30,51 @@ public abstract class RemoteObject extends PhysicalObject { */ protected static final float STEP = 0.01f; + /** + * Unique object id. + */ + private UUID myId; + + /** + * The home address. + */ + private SocketAddress myHome; + + /** + * The local computer address. + */ + transient private boolean isLocal; + + /** + * The socket. + */ + transient private RemoteObjectReciever myListener; + + /** + * + * @param thePosition + * @param mass + */ public RemoteObject(Vector3f thePosition, float mass) { super(thePosition, mass); + + myId = UUID.randomUUID(); + isLocal = true; } - + + public void setHome(SocketAddress home) { + myHome = home; + + myListener = new RemoteObjectReciever(); + new Thread(myListener).start(); + } + /** * This method is called when a key event is received. * * @param event The KeyEvent recieved */ - protected void keyEventReceived(final KeyEvent event) { + protected void keyEventReceived(final KeyInfo event) { switch (event.getKeyCode()) { case KeyEvent.VK_W: velocity.z -= STEP; @@ -57,17 +100,84 @@ public abstract class RemoteObject extends PhysicalObject { * @return The object's name for the menu. */ public abstract String getName(); + + public UUID getId() { + return myId; + } /** * Send a KeyEvent to this remote object. * * @param keyEvent The key event */ - public void sendKeyEvent(final KeyEvent keyEvent) { - // TODO: Send this event over the network if necessary. + public void sendKeyEvent(final KeyInfo keyEvent) { keyEventReceived(keyEvent); - updateTranformGroup(); } - + + + private void readObject(ObjectInputStream in) + throws IOException, ClassNotFoundException { + in.defaultReadObject(); + + // Start Socket Thread + myListener = new RemoteObjectReciever(); + new Thread(myListener).start(); + + } + + private void writeObject(ObjectOutputStream out) + throws IOException { + out.defaultWriteObject(); + + myListener.stop(); + } + + private class RemoteObjectReciever implements Runnable { + private Socket mySocket; + + public void stop() { + try { + mySocket.close(); + + } catch (IOException e) { + } + } + + public void run() { + mySocket = new Socket(); + + try { + System.out.println("Connecting to " + myHome); + mySocket.connect(myHome); + + // Send id + DataOutputStream out = new DataOutputStream(mySocket.getOutputStream()); + out.writeLong(myId.getMostSignificantBits()); + out.writeLong(myId.getLeastSignificantBits()); + out.flush(); + + // Wait for data + DataInputStream in = new DataInputStream(mySocket.getInputStream()); + + while (true) { + try { + int key = in.readInt(); + + KeyInfo event = new KeyInfo(key); + + sendKeyEvent(event); + + } catch (Exception e) { + System.err.println("Could not read KeyEvent: " + e); + break; + } + } + + } catch (IOException e) { + System.err.println(e); + } + } + + } } |