public void handle(AbstractMessage message, Game game) { PlayerConverter playerConverter = new PlayerConverter(); Player player; logger.debug("entered handler" + message.getSession()); logger.debug("entered handler" + message.getSession().getPrincipal().getName()); if ((player = game.getPlayer(message.getSession().getPrincipal().getName())) != null) { game.removePlayer(message.getSession().getPrincipal().getName()); logger.debug("now players size is" + game.getPlayers().size()); /*if (game.getPlayers().size() < 2) { logger.debug("less than 2 players remains"); game.setState(Finished.class); logger.debug("game is ended"); //GameFinished gameFinished = new GameFinished(GameFinished.Status.TOO_LITTLE_USERS); for (Player p : game.getPlayers().values()) { if (p.getState() != Player.State.ONLINE) { continue; } try { p.getWebSocketSession().sendMessage(new TextMessage(objectMapper.writeValueAsString(gameFinished))); } catch (IOException e) { UserOccasionallyDisconnected userOccasionallyDisconnected = new UserOccasionallyDisconnected(); userOccasionallyDisconnected.setSession(message.getSession()); playerConnectorOrGameRemover.handle(userOccasionallyDisconnected); } } playerConnectorOrGameRemover.handle(new RemoveGameRequest(game)); } else { if (checkIfWaitingUsersExists(game)) { logger.debug("waiting users exists"); GameStateUpdateMessage gameStateUpdateMessage = new GameStateUpdateMessage(playerConverter.convert(new ArrayList<Player>(game.getPlayers().values())),game.getState()); for (Player p : game.getPlayers().values()) { if (p.getState() != Player.State.ONLINE) { continue; } try { p.getWebSocketSession().sendMessage(new TextMessage(objectMapper.writeValueAsString(gameStateUpdateMessage))); } catch (IOException e) { UserOccasionallyDisconnected userOccasionallyDisconnected = new UserOccasionallyDisconnected(); userOccasionallyDisconnected.setSession(message.getSession()); playerConnectorOrGameRemover.handle(userOccasionallyDisconnected); } } } else { logger.debug("no waiting users more, can continue"); game.restoreState(); logger.debug("restored state "+game.getState()); GameStateUpdateMessage gameStateUpdateMessage = new GameStateUpdateMessage(playerConverter.convert(new ArrayList<Player>(game.getPlayers().values())),game.getState()); for (Player p : game.getPlayers().values()) { if (p.getState() != Player.State.ONLINE) { continue; } try { p.getWebSocketSession().sendMessage(new TextMessage(objectMapper.writeValueAsString(gameStateUpdateMessage))); } catch (IOException e) { UserOccasionallyDisconnected userOccasionallyDisconnected = new UserOccasionallyDisconnected(); userOccasionallyDisconnected.setSession(message.getSession()); playerConnectorOrGameRemover.handle(userOccasionallyDisconnected); } } } }*/ } }