Пример #1
0
 protected override void OnStopServer()
 {
     base.OnStopServer();
     MapUsersByCharacterId.Clear();
     ConnectionIdsByCharacterId.Clear();
     ConnectionIdsByCharacterName.Clear();
     MapSpawnServerPeers.Clear();
     MapServerPeers.Clear();
     MapServerPeersByMapId.Clear();
     MapServerPeersByInstanceId.Clear();
 }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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;
            }
        }