예제 #1
0
        private void OnCommandReceived(ServerCommand command)
        {
            switch (command.Type)
            {
            case ServerCommandType.JCH:
                var jch = command.Payload.ToObject <ServerJch>();
                if (jch.character.identity == chatManager.OwnCharacterName)
                {
                    var memberList = new ObservableKeyedList <Character, Channel.Member>(x => x.Character);
                    var newChannel = new Channel(jch.channel, jch.title, memberList);
                    members.Add(newChannel, memberList);
                    joinedChannels.Add(newChannel);
                    SetIsJoined(newChannel, true);
                    return;
                }
                break;

            case ServerCommandType.ICH:
            case ServerCommandType.CDS:
            case ServerCommandType.CBU:
            case ServerCommandType.CKU:
            case ServerCommandType.COA:
            case ServerCommandType.COL:
            case ServerCommandType.COR:
            case ServerCommandType.CSO:
            case ServerCommandType.CTU:
            case ServerCommandType.LCH:
            case ServerCommandType.RMO:
                break;

            case ServerCommandType.FLN:
                var flnCharacter = command.Value <string>("character");
                foreach (var item in joinedChannels.ToList())
                {
                    members[item].Remove(characterManager.GetCharacter(flnCharacter));
                }
                return;

            case ServerCommandType.CHA:
                publicChannels.Reset(command.Payload.GetValue("channels").Select(x => {
                    var name      = x.Value <string>("name");
                    var item      = new ChannelListItem(name, name, x.Value <int>("characters"));
                    item.IsJoined = JoinedChannels.ContainsKey(item.Id);
                    return(item);
                }));
                return;

            case ServerCommandType.ORS:
                privateChannels.Reset(command.Payload.GetValue("channels").Select(x => {
                    var item      = new ChannelListItem(x.Value <string>("name"), x.Value <string>("title"), x.Value <int>("characters"));
                    item.IsJoined = JoinedChannels.ContainsKey(item.Id);
                    return(item);
                }));
                return;

            default:
                return;
            }
            HandleChannelMessage(joinedChannels[command.Value <string>("channel")], command);
        }