public static void removeSocketIOClient(String sessionId) { for (String userId : clientMap.keySet()) { Player player = clientMap.get(userId); if (player != null && !player.isFlashClient()) { for (IOClient socketIOClient : player.getSocketIOClients()) { if (socketIOClient.getSessionID().equals(sessionId)) { player.getSocketIOClients().remove(socketIOClient); if (player.getSocketIOClients().isEmpty()) { removePlayer(player.getUserId()); } } } } } }
public static void removePlayer(String userId) { System.out.println("I will remove " + userId + " from the players map."); Player player = clientMap.get(userId); // TODO: This verification should be unnecessary. Only HTML clients should be stored if (player != null && !player.isFlashClient() && player.getDarkstarClient().isConnected()) { player .getDarkstarClient() .logout(false); // Do NOT try to logout forcing it. The code that is written after // logout(true) will never be executed. API Bug. player.setDarkstarClient(null); for (IOClient socketIOClient : player.getSocketIOClients()) { socketIOClient.disconnect(); } } clientMap.remove(userId); System.err.println("I have removed " + userId + " from the players map."); System.gc(); }