diff --git a/src/com/annimon/turrets/GameCanvas.java b/src/com/annimon/turrets/GameCanvas.java index 61d7b80..f9a1f69 100644 --- a/src/com/annimon/turrets/GameCanvas.java +++ b/src/com/annimon/turrets/GameCanvas.java @@ -45,15 +45,24 @@ public class GameCanvas extends DoubleBufferedCanvas implements Runnable, Networ @Override public void onStatusChanged(int status, Object data) { + if (serverInstance) serverNetworkStatus(status, data); + else clientNetworkStatus(status, data); + } + + private void serverNetworkStatus(int status, Object data) { switch (status) { case ON_CONNECT: - gameStarted = true; - - terrain = new Terrain(Constants.WIDTH); - terrain.generate(System.currentTimeMillis()); + long seed = System.currentTimeMillis(); + socketHelper.sendSeed(seed); + startGame(seed); + break; + } + } - serverTurret = new Turret(Turret.SERVER, terrain.getFirstBlockHeight(), terrain); - clientTurret = new Turret(Turret.CLIENT, terrain.getLastBlockHeight(), terrain); + private void clientNetworkStatus(int status, Object data) { + switch (status) { + case ON_SEED_RECEIVED: + startGame((long) data); break; } } @@ -82,6 +91,16 @@ public class GameCanvas extends DoubleBufferedCanvas implements Runnable, Networ new Background().draw(g); g.dispose(); } + + private void startGame(long seed) { + terrain = new Terrain(Constants.WIDTH); + terrain.generate(seed); + + serverTurret = new Turret(Turret.SERVER, terrain.getFirstBlockHeight(), terrain); + clientTurret = new Turret(Turret.CLIENT, terrain.getLastBlockHeight(), terrain); + + gameStarted = true; + } @Override protected void mousePressed(int x, int y) { diff --git a/src/com/annimon/turrets/NetworkListener.java b/src/com/annimon/turrets/NetworkListener.java index b71931c..a460b35 100644 --- a/src/com/annimon/turrets/NetworkListener.java +++ b/src/com/annimon/turrets/NetworkListener.java @@ -7,7 +7,8 @@ package com.annimon.turrets; public interface NetworkListener { public static final int - ON_CONNECT = 1; + ON_CONNECT = 1, + ON_SEED_RECEIVED = 2; public void onStatusChanged(int status, Object data); } diff --git a/src/com/annimon/turrets/SocketHelper.java b/src/com/annimon/turrets/SocketHelper.java index de4130b..8eccf6a 100644 --- a/src/com/annimon/turrets/SocketHelper.java +++ b/src/com/annimon/turrets/SocketHelper.java @@ -27,6 +27,31 @@ public class SocketHelper extends Thread { @Override public void run() { listener.onStatusChanged(NetworkListener.ON_CONNECT, null); + while (true) { + try { + final int status = dis.readInt(); + switch (status) { + case NetworkListener.ON_SEED_RECEIVED: + listener.onStatusChanged(status, receiveSeed()); + break; + } + + } catch (IOException ex) { } + try { + Thread.sleep(200); + } catch (InterruptedException ex) { } + } + } + + public void sendSeed(long seed) { + try { + dos.writeInt(NetworkListener.ON_SEED_RECEIVED); + dos.writeLong(seed); + } catch (IOException ex) {} + } + + private long receiveSeed() throws IOException { + return dis.readLong(); } public void close() throws IOException {