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:
package org.multiuser.simulation.ballPhysics;
/**
*
* @author Jibbylala
*/
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:
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;
/**
*
* @author Jibbylala
*/
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:
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;
/**
*
* @author Jibbylala
*/
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; // The container 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();
// keep server running
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.