private void RemoveMapUsers(long connectionId) { List <KeyValuePair <string, SocialCharacterData> > mapUsers = MapUsersByCharacterId.ToList(); foreach (KeyValuePair <string, SocialCharacterData> entry in mapUsers) { // Find characters which connected to disconnecting map server long tempConnectionId; if (!ConnectionIdsByCharacterId.TryGetValue(entry.Key, out tempConnectionId) || connectionId != tempConnectionId) { continue; } // Send remove messages to other map servers UpdateMapUser(UpdateUserCharacterMessage.UpdateType.Remove, entry.Value, connectionId); // Clear disconnecting map users data MapUsersByCharacterId.Remove(entry.Key); ConnectionIdsByCharacterId.Remove(entry.Key); ConnectionIdsByCharacterName.Remove(entry.Value.characterName); } }
private void HandleUpdateMapUser(MessageHandlerData messageHandler) { long connectionId = messageHandler.ConnectionId; UpdateUserCharacterMessage message = messageHandler.ReadMessage <UpdateUserCharacterMessage>(); SocialCharacterData userData; switch (message.type) { case UpdateUserCharacterMessage.UpdateType.Add: if (!MapUsersByCharacterId.ContainsKey(message.character.id)) { MapUsersByCharacterId[message.character.id] = message.character; ConnectionIdsByCharacterId[message.character.id] = connectionId; ConnectionIdsByCharacterName[message.character.characterName] = connectionId; UpdateMapUser(UpdateUserCharacterMessage.UpdateType.Add, message.character, connectionId); } break; case UpdateUserCharacterMessage.UpdateType.Remove: if (MapUsersByCharacterId.TryGetValue(message.character.id, out userData)) { MapUsersByCharacterId.Remove(userData.id); ConnectionIdsByCharacterId.Remove(userData.id); ConnectionIdsByCharacterName.Remove(userData.characterName); UpdateMapUser(UpdateUserCharacterMessage.UpdateType.Remove, userData, connectionId); } break; case UpdateUserCharacterMessage.UpdateType.Online: if (MapUsersByCharacterId.ContainsKey(message.character.id)) { MapUsersByCharacterId[message.character.id] = message.character; UpdateMapUser(UpdateUserCharacterMessage.UpdateType.Online, message.character, connectionId); } break; } }