package fr.lyrgard.hexScape.server; import java.util.HashMap; import java.util.Map; import org.kohsuke.args4j.CmdLineException; import org.kohsuke.args4j.CmdLineParser; import org.kohsuke.args4j.Option; import org.kohsuke.args4j.spi.IntOptionHandler; import fr.lyrgard.hexScape.model.ServerConstant; import fr.lyrgard.hexScape.model.Universe; import fr.lyrgard.hexScape.model.game.Game; import fr.lyrgard.hexScape.model.player.Player; import fr.lyrgard.hexScape.model.room.Room; import fr.lyrgard.hexScape.server.listener.DiceMessageListener; import fr.lyrgard.hexScape.server.listener.GameMessageListener; import fr.lyrgard.hexScape.server.listener.MarkerMessageListener; import fr.lyrgard.hexScape.server.listener.PieceMessageListener; import fr.lyrgard.hexScape.server.listener.RoomMessageListener; import fr.lyrgard.hexScape.server.listener.ServerMessageListener; import fr.lyrgard.hexScape.server.service.IdService; import fr.lyrgard.hexScape.server.service.RoomService; import fr.lyrgard.hexscape.server.network.ServerNetwork; public class HexScapeServer { private static final HexScapeServer instance = new HexScapeServer(); @Option(name="-p", aliases={"--port"}, usage="The port to use for incoming connections", handler=IntOptionHandler.class) private int port = ServerConstant.SERVER_PORT; private Map<String, Room> rooms = new HashMap<>(); private Map<String, Game> games = new HashMap<>(); private Map<String, Player> players = new HashMap<>(); private RoomService roomService = new RoomService(); private IdService idService = new IdService(); public static HexScapeServer getInstance() { return instance; } private HexScapeServer() { } public static void main(String... args) { CmdLineParser parser = new CmdLineParser(getInstance()); try { parser.parseArgument(args); getInstance().start(); } catch (CmdLineException e) { System.err.println(e.getMessage()); // print the list of available options parser.printUsage(System.err); System.err.println(); } } private void start() { Room room = new Room(); room.setId(Room.DEFAULT_ROOM_ID); room.setName(Room.DEFAULT_ROOM_ID); Universe.getInstance().getRoomsByRoomIds().put(Room.DEFAULT_ROOM_ID, room); ServerMessageListener.start(); RoomMessageListener.start(); GameMessageListener.start(); DiceMessageListener.start(); PieceMessageListener.start(); MarkerMessageListener.start(); try { ServerNetwork.getInstance().start(port); } catch (Exception e) { e.printStackTrace(); System.exit(1); } } public Map<String, Room> getRooms() { return rooms; } public Map<String, Game> getGames() { return games; } public Map<String, Player> getPlayers() { return players; } public RoomService getRoomService() { return roomService; } public IdService getIdService() { return idService; } }