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 players = new HashMap(); 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] "); 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] "); } 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] "); } }