package fr.lyrgard.hexScape.server.listener; import java.io.IOException; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonMappingException; import com.google.common.eventbus.Subscribe; import fr.lyrgard.hexScape.bus.CoreMessageBus; import fr.lyrgard.hexScape.message.JoinRoomMessage; import fr.lyrgard.hexScape.message.RoomMessagePostedMessage; import fr.lyrgard.hexScape.message.UserJoinedRoomMessage; import fr.lyrgard.hexScape.message.RoomJoinedMessage; import fr.lyrgard.hexScape.model.Universe; import fr.lyrgard.hexScape.model.game.Game; import fr.lyrgard.hexScape.model.player.User; import fr.lyrgard.hexScape.model.room.Room; import fr.lyrgard.hexScape.server.service.GameService; import fr.lyrgard.hexscape.server.network.ServerNetwork; public class RoomMessageListener { private static RoomMessageListener instance; public static void start() { if (instance == null) { instance = new RoomMessageListener(); CoreMessageBus.register(instance); } } private RoomMessageListener() { } @Subscribe public void onJoinRoom(JoinRoomMessage message) { String userId = message.getSessionUserId(); String roomId = message.getRoomId(); User user = Universe.getInstance().getUsersByIds().get(userId); Room room = Universe.getInstance().getRoomsByRoomIds().get(roomId); if (user != null && room != null) { room.getUsers().add(user); user.setRoom(room); try { Room clone = Room.fromJson(room.toJson()); for (Game game : clone.getGames()) { GameService.removeUnseeableHiddenMarkersInfos(game, userId); } RoomJoinedMessage returnMessage = new RoomJoinedMessage(room); ServerNetwork.getInstance().sendMessageToUser(returnMessage, user.getId()); UserJoinedRoomMessage broadcastMessage = new UserJoinedRoomMessage(user.getId(), user.getName(), user.getColor(), roomId); ServerNetwork.getInstance().sendMessageToRoomExceptUser(broadcastMessage, roomId, userId); } catch (IOException e) { e.printStackTrace(); } } } @Subscribe public void onRoomMessagePosted(RoomMessagePostedMessage message) { String userId = message.getSessionUserId(); User user = Universe.getInstance().getUsersByIds().get(userId); if (user != null && user.getRoom() != null) { ServerNetwork.getInstance().sendMessageToRoom(message, user.getRoom().getId()); } } }