Hi all,
Hope u all are fine =), I created a simple network layer with kryonet, this can work as a sample application for kryonet.
Game state:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| package org.multiuser.simulation.ballPhysics;
public class BallState { private float X; private float Y;
public BallState() { } public BallState(int x, int y) { this.X = x; this.Y = y; } public void setX(float f) { this.X = f; } public void setY(float y) { this.Y = y; } @Override public String toString() { return "Ball X (" + X + ")"+ ", Y(" + Y + ")"; } } |
The Client:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| package org.physics.balls;
import java.io.IOException;
import org.multiuser.simulation.ballPhysics.BallState;
import com.esotericsoftware.kryo.Kryo; import com.esotericsoftware.kryonet.Client; import com.esotericsoftware.kryonet.Connection; import com.esotericsoftware.kryonet.Listener;
public class SimulationClient {
private Client simulationClient;
private boolean connected = false;
public SimulationClient() {
try { simulationClient = new Client(); simulationClient.start();
Kryo kryo = simulationClient.getKryo(); kryo.register(BallState.class);
simulationClient.addListener(new Listener() { public void received(Connection connection, Object object) { if (object instanceof BallState) { BallState ball = (BallState) object; System.out .println("Received Ball : " + ball.toString()); } } }); } catch (Exception e) { e.printStackTrace(); }
new Thread("Connect") { public void run() { try { simulationClient.connect(5000, Common.DEFAULT_IP, Common.DEFAULT_PORT_TCP); } catch (IOException ex) { ex.printStackTrace(); System.exit(1); }
} }.start();
}
public static void main(String[] argv) { try { new SimulationClient();
} catch (Exception e) { e.printStackTrace(); } } } |
The Server:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
| package org.physics.balls;
import java.awt.Color;
import java.io.IOException;
import java.util.Random;
import com.esotericsoftware.kryo.Kryo; import com.esotericsoftware.kryonet.Connection; import com.esotericsoftware.kryonet.Listener; import com.esotericsoftware.kryonet.Server;
import org.multiuser.simulation.ballPhysics.BallState;
public class SimulationServer implements Runnable {
public static final int BOX_WIDTH = 640; public static final int BOX_HEIGHT = 480; public static final int BALLS = 1;
private static BallState BS = new BallState(10, 5); public boolean running = true; private volatile boolean Play = true; private long mFrameDelay = 564; private Box box; private Ball[] balls = new Ball[BALLS];
private int port = 54555;
private Server server;
public SimulationServer() throws Exception {
server = new Server();
Thread gameThread = new Thread(this);
Kryo kryo = server.getKryo(); server.addListener(new Listener() { public void received(Connection c, Object object) {
}
public void disconnected(Connection c) {
} });
server.bind(port); server.start(); gameThread.start(); while (running) { Thread.sleep(100); } System.out.println("server started"); }
@Override public void run() { while (Play == true) { System.out.println("Sending game state process start"); int radius = 40; Random rand = new Random(); int angleInDegree = rand.nextInt(360); box = new Box(0, 0, BOX_WIDTH, BOX_HEIGHT); balls[0] = new Ball(BS, "ball" + 0, 0, 50, 40, 14, angleInDegree, Color.yellow);
for (int i = 0; i < BALLS; i++) { balls[i].move(); try { balls[i].collideWith(box); System.out.println("Sending object state : " + BS); server.sendToAllTCP(BS); } catch (IOException e) { e.printStackTrace(); } } try { Thread.sleep(mFrameDelay); } catch (InterruptedException ie) { } } }
public static void main(String[] args) { try { new SimulationServer(); } catch (Exception e) { e.printStackTrace(); } }
} |
enjoy!
P.S: I m sending this time single object, I will update this for sending the multiple objects (array of objects) and some complex objects, which exploit KRYO Serialization capabilities.