public void SendPacket(byte[] rawPacket) { Logger.Warn($"[{_clientId}] Outgoing packet:{Environment.NewLine}" + $"Packet Length: {rawPacket.Length}{Environment.NewLine}" + $"Packet ID: {EncodeHelper.DecodeShort(new []{rawPacket[6], rawPacket[7]}, true)}{Environment.NewLine}" + $"Packet Hex dump:{Environment.NewLine}" + $"{HexUtils.HexDump(rawPacket)}"); _socket.Send(rawPacket); }
private void ProcessorOnPacketProcessed(object sender, PacketProcessedEventArgs e) { var payload = e.ClientPacket.Payload; //Logger.Debug("Received packet"); Logger.Debug($"Received packet:\n" + $"\t{"Id",-9}: {payload.Opcode} ({(int)payload.Opcode})\n" + $"\t{"Length",-9}: {payload.Length}\n" + $"\t{"Packet type",-9}: {payload.PacketType} \n" + $"\t{"Hex dump",-9}:\n" + $"{HexUtils.HexDump(payload.Payload)}"); }
public void Send(ServerPacket packet) { var rawPacket = packet.ToArray(); // Debug to console. Logger.Fatal($"Sending packet:\n" + $"\t{"Id",-9}: {packet.Opcode}\n" + $"\t{"Length",-9}: {packet.Length}\n" + $"\t{"Hex dump",-9}:\n" + $"{HexUtils.HexDump(packet.PacketRaw)}"); // Send to client. Socket.Send(rawPacket); // Clean-up packet resources. packet.Dispose(); }
private void ReceiveCallback(IAsyncResult ar) { try { var byteCount = _socket.EndReceive(ar); if (byteCount == 0) { _socket.Close(); _socket.Dispose(); Logger.Debug($"[{_clientId}] Connection from {_remoteEndPoint.Address} was dropped."); return; } var packet = new byte[byteCount]; Buffer.BlockCopy(_buffer, 0, packet, 0, byteCount); /* Packet 502 - RsLoginFail * * new Packet(502) * .Append(EncodeHelper.CreatePadding(4)) * .Append(EncodeHelper.EncodeShort(1101, true)); */ /* Packet 602 - LsLoginFail * * new Packet(602) * .Append(EncodeHelper.CreatePadding(4)) * .Append(EncodeHelper.EncodeInteger(819, true)) // Custom error * .Append(Encoding.Unicode.GetBytes("Some kind of custom error")); // Custom error */ var packetLength = EncodeHelper.DecodeShort(new[] { packet[1], packet[0] }); var packetHeader = packet[2]; // Not sure :) Logger.Trace($"[{_clientId}] Incoming packet:{Environment.NewLine}" + $"Packet Length Raw: {packet.Length}{Environment.NewLine}" + $"Packet Length: {packetLength}{Environment.NewLine}" + $"Packet ID: {packetHeader}{Environment.NewLine}" + $"Packet Hex:{Environment.NewLine}" + $"{HexUtils.HexDump(packet)}"); var packetList = new List <byte[]>(); switch (packetHeader) { case 255: { // Connect to port 8005?? packetList.Add(new Packet(501) .Append(EncodeHelper.CreatePadding(4)) .Append(0x74) .Append(0x0) .Append(0x0) .Append(0x1) .GetPacket()); break; } case 5: { packetList.Add(new Packet(601) .Append(EncodeHelper.CreatePadding(4)) .Append(Encoding.ASCII.GetBytes("Cool")) .Append(EncodeHelper.CreatePadding(42)) .Append(Encoding.Unicode.GetBytes("Test")) .GetPacket()); break; } case 3: { packetList.Add(new Packet(2).GetPacket()); break; } default: Logger.Error($"[{_clientId}] Incoming packet was not known."); break; } if (packetList.Count > 0) { foreach (var outgoingPacket in packetList) { SendPacket(outgoingPacket); } } } catch (Exception exception) { Logger.Error(exception, $"[{_clientId}] An exception occured during receive."); } finally { WaitForData(); } }