Пример #1
0
        public async Task SendChatToServer(string chat, string targetCharacter)
        {
            var chatType = _chatTypeCalculator.CalculateChatType(chat);

            if (chatType == ChatType.Command)
            {
                if (HandleCommand(chat))
                {
                    return;
                }

                //treat unhandled command as local chat
                chatType = ChatType.Local;
            }

            if (chatType == ChatType.PM)
            {
                if (string.IsNullOrEmpty(_chatRepository.PMTarget1))
                {
                    _chatRepository.PMTarget1 = targetCharacter;
                }
                else if (string.IsNullOrEmpty(_chatRepository.PMTarget2))
                {
                    _chatRepository.PMTarget2 = targetCharacter;
                }
            }

            chat = _chatProcessor.RemoveFirstCharacterIfNeeded(chat, chatType, targetCharacter);

            var chatPacket = _chatPacketBuilder.BuildChatPacket(chatType, chat, targetCharacter);
            await _packetSendService.SendPacketAsync(chatPacket);

            AddChatForLocalDisplay(chatType, chat, targetCharacter);
        }
Пример #2
0
        public bool Execute(string parameter)
        {
            if (string.IsNullOrEmpty(parameter))
            {
                return(false);
            }

            var packet = new PacketBuilder(PacketFamily.Players, PacketAction.Accept)
                         .AddString(parameter)
                         .Build();

            _packetSendService.SendPacketAsync(packet);
            return(true);
        }
Пример #3
0
        public bool Execute(string parameter)
        {
            ushort requestID;

            do
            {
                requestID = (ushort)_random.Next(ushort.MinValue, ushort.MaxValue - 1);
            } while (_pingTimeRepository.PingRequests.ContainsKey(requestID));

            _pingTimeRepository.PingRequests.Add(requestID, DateTime.Now);

            var packet = new PacketBuilder(PacketFamily.Message, PacketAction.Ping)
                         .AddShort((short)requestID)
                         .Build();

            _packetSendService.SendPacketAsync(packet);
            return(true);
        }
Пример #4
0
        public override bool HandlePacket(IPacket packet)
        {
            var seq1 = packet.ReadShort();
            var seq2 = packet.ReadChar();

            _packetProcessActions.SetUpdatedBaseSequenceNumber(seq1, seq2);

            var response = new PacketBuilder(PacketFamily.Connection, PacketAction.Ping).Build();

            try
            {
                _packetSendService.SendPacketAsync(response)
                .Wait();
            }
            catch (NoDataSentException)
            {
                return(false);
            }

            return(true);
        }