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); }
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); }
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); }
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); }