The Simplest and Easiest Game Network layer with KRYONET

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.