package com.edgu.bmo.server;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.edgu.bmo.server.packets.PacketNewBomb;
import com.edgu.bmo.server.packets.PacketNewPlayer;
import com.edgu.bmo.server.packets.PacketRemoveBomb;
import com.edgu.bmo.server.packets.PacketRemovePlayer;
import com.edgu.bmo.server.packets.PacketSetGrassCollideTile;
import com.edgu.bmo.server.packets.PacketSetGrassTile;
import com.edgu.bmo.server.packets.PacketUpdateRotation;
import com.edgu.bmo.server.packets.PacketUpdateX;
import com.edgu.bmo.server.packets.PacketUpdateY;
import com.esotericsoftware.kryonet.Connection;
import com.esotericsoftware.kryonet.Listener;
import com.esotericsoftware.kryonet.Server;
public class BMOServer extends Listener {
private static Server server;
private static final int tcpPort = 54555, udpPort = 54555;
private static Map<Integer, Player> players = new HashMap<Integer, Player>();
private static CommandListener commandListener = new CommandListener();
private static Log log = new Log();
public static void main (String[] args) throws IOException {
server = new Server();
server.getKryo().register(PacketNewPlayer.class);
server.getKryo().register(PacketRemovePlayer.class);
server.getKryo().register(PacketUpdateRotation.class);
server.getKryo().register(PacketUpdateX.class);
server.getKryo().register(PacketUpdateY.class);
server.getKryo().register(PacketNewBomb.class);
server.getKryo().register(PacketRemoveBomb.class);
server.getKryo().register(PacketSetGrassTile.class);
server.getKryo().register(PacketSetGrassCollideTile.class);
server.bind(tcpPort, udpPort);
server.start();
server.addListener(new BMOServer());
log.output("[Launch] <Server is ready on 54555 Port. [TCP]>");
Thread thread = new Thread(commandListener);
thread.start();
}
public void connected (Connection connection) {
Player player = new Player();
player.connection = connection;
PacketNewPlayer packet = new PacketNewPlayer();
packet.id = connection.getID();
server.sendToAllExceptUDP(connection.getID(), packet);
for (Player p : players.values()) {
PacketNewPlayer packet2 = new PacketNewPlayer();
packet2.id = p.connection.getID();
connection.sendTCP(packet2);
}
players.put(connection.getID(), player);
log.output("[Connected] <Player: " + connection.getID() + ", IP: " + connection.getRemoteAddressTCP().getHostString() + ">");
}
public void received (Connection connection, Object object) {
if (object instanceof PacketUpdateX) {
PacketUpdateX packet = (PacketUpdateX) object;
players.get(connection.getID()).x = packet.x;
packet.id = connection.getID();
server.sendToAllExceptUDP(connection.getID(), packet);
} else if (object instanceof PacketUpdateY) {
PacketUpdateY packet = (PacketUpdateY) object;
players.get(connection.getID()).y = packet.y;
packet.id = connection.getID();
server.sendToAllExceptUDP(connection.getID(), packet);
} else if (object instanceof PacketUpdateRotation) {
PacketUpdateRotation packet = (PacketUpdateRotation) object;
players.get(connection.getID()).rotation = packet.rotation;
packet.id = connection.getID();
server.sendToAllExceptUDP(connection.getID(), packet);
} else if (object instanceof PacketNewBomb) {
PacketNewBomb packet = (PacketNewBomb) object;
server.sendToAllExceptUDP(connection.getID(), packet);
} else if (object instanceof PacketRemoveBomb) {
PacketRemoveBomb packet = (PacketRemoveBomb) object;
server.sendToAllExceptUDP(connection.getID(), packet);
} else if (object instanceof PacketSetGrassTile) {
PacketSetGrassTile packet = (PacketSetGrassTile) object;
server.sendToAllExceptUDP(connection.getID(), packet);
} else if (object instanceof PacketSetGrassCollideTile) {
PacketSetGrassCollideTile packet = (PacketSetGrassCollideTile) object;
server.sendToAllExceptUDP(connection.getID(), packet);
}
}
public void disconnected (Connection connection){
players.remove(connection.getID());
PacketRemovePlayer packet = new PacketRemovePlayer();
packet.id = connection.getID();
server.sendToAllExceptUDP(connection.getID(), packet);
log.output("[Disconnected] <Player: " + connection.getID() + ">");
}
}