Ejemplo n.º 1
0
        private void HandleServerCommand(ServerCommand command)
        {
            switch (command.Type)
            {
            case ServerCommandType.PRI:
                HandlePrivateMessage(command, command.Value <string>("character"));
                break;

            case ServerCommandType.MSG:
            case ServerCommandType.LRP:
                HandleChannelMessage(command, command.Value <string>("character"));
                break;

            case ServerCommandType.RLL:
                var rll = command.Payload.ToObject <ServerRll>();
                if (rll.channel == null)
                {
                    HandlePrivateMessage(command, rll.character);
                }
                else
                {
                    HandleChannelMessage(command, rll.character);
                }
                break;

            case ServerCommandType.TPN:
                var tpn = command.Payload.ToObject <ServerTpn>();
                characterManager.GetCharacter(tpn.character).TypingStatus = tpn.status;
                break;
            }
        }
Ejemplo n.º 2
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);
        }
Ejemplo n.º 3
0
        private void OnCommandReceived(ServerCommand command)
        {
            switch (command.Type)
            {
            case ServerCommandType.BRO:
                var bro = command.Payload.ToObject <ServerBro>();
                AddEvent(new BroadcastEvent(characterManager.GetCharacter(bro.character), bro.message, command.Time));
                break;

            case ServerCommandType.ERR:
                var err = command.Payload.ToObject <ServerErr>();
                AddEvent(new ErrorEvent(err.message, command.Time));
                break;

            case ServerCommandType.STA:
                var sta       = command.Payload.ToObject <ServerSta>();
                var character = characterManager.GetCharacter(sta.character);
                AddEvent(new StatusEvent(character, sta.status, sta.statusmsg, command.Time));
                break;

            case ServerCommandType.RTB:
                var rtb = command.Payload.ToObject <ServerRtb>();
                switch (rtb.type)
                {
                case ServerRtb.Type.note:
                    AddEvent(new NoteEvent(characterManager.GetCharacter(command.Value <string>("sender")), command.Value <string>("id"), command.Value <string>("subject")));
                    break;

                case ServerRtb.Type.friendadd:
                case ServerRtb.Type.friendremove:
                case ServerRtb.Type.friendrequest:
                case ServerRtb.Type.trackadd:
                case ServerRtb.Type.trackrem:
                    break;

                default:
                    AddEvent(new RtbEvent(rtb.type, command.Value <string>("id"), characterManager.GetCharacter(rtb.name), command.Payload));
                    break;
                }
                break;

            case ServerCommandType.CIU:
                var ciu     = command.Payload.ToObject <ServerCiu>();
                var channel = (ciu.name == ciu.title ? channelManager.PublicChannels : channelManager.PrivateChannels)[ciu.name];
                AddEvent(new InviteEvent(characterManager.GetCharacter(ciu.sender), channel));
                break;

            case ServerCommandType.SYS:
                var chan = command.Value <string>("channel");
                AddEvent(new SysEvent(command.Value <string>("message"), channelManager.JoinedChannels.ContainsKey(chan) ? channelManager.JoinedChannels[chan] : null));
                break;

            case ServerCommandType.ZZZ:
                AddEvent(new SysEvent("Debug: " + command.Value <string>("message"), null));
                break;
            }
        }
        private Message DoRead(Stream stream)
        {
            var time   = stream.ReadByte() << 24 | stream.ReadByte() << 16 | stream.ReadByte() << 8 | stream.ReadByte();
            var date   = new DateTime((long)time * 10000000 + Helpers.UnixEpoch.Ticks);
            var type   = (Message.Type)stream.ReadByte();
            var length = stream.ReadByte();
            var bytes  = new byte[length];

            stream.Read(bytes, 0, length);
            var sender = Encoding.UTF8.GetString(bytes, 0, length);

            length = stream.ReadByte() << 8 | stream.ReadByte();
            bytes  = new byte[length];
            stream.Read(bytes, 0, length);
            var text = Encoding.UTF8.GetString(bytes, 0, length);

            return(new Message(type, characterManager.GetCharacter(sender), date, text));
        }
Ejemplo n.º 5
0
 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
 {
     return(new Channel.Member(characterManager.GetCharacter((string)reader.Value)));
 }
Ejemplo n.º 6
0
 public CharacterViewModel GetCharacterViewModel(string character) => GetCharacterViewModel(characterManager.GetCharacter(character));
Ejemplo n.º 7
0
        public GameCharacter GetCharacter(int characterId)
        {
            var result = _characterManager.GetCharacter(characterId);

            return(result);
        }