package fr.lyrgard.hexscape.server.network; import java.util.HashMap; import java.util.Map; import org.eclipse.jetty.server.Server; import fr.lyrgard.hexScape.message.AbstractMessage; 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.player.User; import fr.lyrgard.hexScape.model.room.Room; public class ServerNetwork { private static final ServerNetwork INSTANCE = new ServerNetwork(); public static ServerNetwork getInstance() { return INSTANCE; } private ServerNetwork() { } private Map<String, ServerWebSocket> socketsById = new HashMap<>(); public void start(int port) throws Exception { Server server = new Server(port); ServerWebSocket wsHandler = new ServerWebSocket(); server.setHandler(wsHandler); server.start(); server.join(); } public static void main(String... args){ ServerNetwork serverNetwork = new ServerNetwork(); try { serverNetwork.start(4242); } catch (Exception e) { e.printStackTrace(); } } public void registerSocket(String playerId, ServerWebSocket socket) { socketsById.put(playerId, socket); } public void unRegisterSocket(String playerId) { socketsById.remove(playerId); } public void sendMessageToUser(AbstractMessage message, String userId) { ServerWebSocket socket = socketsById.get(userId); if (socket != null) { socket.send(message); //System.out.println("Sent message " + message.getClass() + " to player " + playerId); } else { System.out.println("Wanted to send message " + message.getClass() + " to user " + userId + " but no socket found"); } } public void sendMessageToRoom(AbstractMessage message, String roomId) { Room room = Universe.getInstance().getRoomsByRoomIds().get(roomId); if (room != null) { for (User user : room.getUsers()) { sendMessageToUser(message, user.getId()); } } } public void sendMessageToRoomExceptUser(AbstractMessage message, String roomId, String userId) { Room room = Universe.getInstance().getRoomsByRoomIds().get(roomId); if (room != null) { for (User user : room.getUsers()) { if (!userId.equals(user.getId())) { sendMessageToUser(message, user.getId()); } } } } public void sendMessageToGame(AbstractMessage message, String gameId) { Game game = Universe.getInstance().getGamesByGameIds().get(gameId); if (game != null) { for (Player player : game.getPlayers()) { if (player.getUserId() != null) sendMessageToUser(message, player.getUserId()); } for (String userId : game.getObserversIds()) { sendMessageToUser(message, userId); } } } public void sendMessageToGameExceptUser(AbstractMessage message, String gameId, String userId) { Game game = Universe.getInstance().getGamesByGameIds().get(gameId); if (game != null) { for (Player otherPlayer : game.getPlayers()) { if (otherPlayer.getUserId() != null && !otherPlayer.getUserId().equals(userId)) { sendMessageToUser(message, otherPlayer.getUserId()); } } for (String otherUserId : game.getObserversIds()) { sendMessageToUser(message, otherUserId); } } } }