示例#1
0
        private void CharacterDisconnectCommand(IDictionary <string, object> command)
        {
            var characterName = command.Get(Constants.Arguments.Character);


            lock (chatStateLocker)
            {
                var character  = CharacterManager.Find(characterName);
                var ofInterest = CharacterManager.IsOfInterest(characterName);

                character.LastAd     = null;
                character.LastReport = null;

                CharacterManager.SignOff(characterName);

                var leaveChannelCommands =
                    from channel in ChatModel.CurrentChannels
                    where channel.CharacterManager.SignOff(characterName)
                    select new Dictionary <string, object>
                {
                    { Constants.Arguments.Character, character.Name },
                    { Constants.Arguments.Channel, channel.Id },
                    { "ignoreUpdate", ofInterest }
                    // ignore updates from characters we'll already get a sign-out notice for
                };

                leaveChannelCommands.Each(LeaveChannelCommand);

                var characterChannel = ChatModel.CurrentPms.FirstByIdOrNull(characterName);

                if (characterChannel != null)
                {
                    characterChannel.TypingStatus = TypingStatus.Clear;
                }

                var updateArgs = new LoginStateChangedEventArgs
                {
                    IsLogIn = false
                };

                Events.NewCharacterUpdate(character, updateArgs);
            }
        }
示例#2
0
        private void CharacterDisconnectCommand(IDictionary<string, object> command)
        {
            var characterName = command.Get(Constants.Arguments.Character);


            lock (chatStateLocker)
            {
                var character = CharacterManager.Find(characterName);
                var ofInterest = CharacterManager.IsOfInterest(characterName);

                character.LastAd = null;
                character.LastReport = null;

                CharacterManager.SignOff(characterName);

                var leaveChannelCommands =
                    from channel in ChatModel.CurrentChannels
                    where channel.CharacterManager.SignOff(characterName)
                    select new Dictionary<string, object>
                    {
                        {Constants.Arguments.Character, character.Name},
                        {Constants.Arguments.Channel, channel.Id},
                        {"ignoreUpdate", ofInterest}
                        // ignore updates from characters we'll already get a sign-out notice for
                    };

                leaveChannelCommands.Each(LeaveChannelCommand);

                var characterChannel = ChatModel.CurrentPms.FirstByIdOrNull(characterName);

                if (characterChannel != null)
                    characterChannel.TypingStatus = TypingStatus.Clear;

                var updateArgs = new LoginStateChangedEventArgs
                {
                    IsLogIn = false
                };

                Events.NewCharacterUpdate(character, updateArgs);
            }
        }