public void OnData() { PacketReader packet = null; if (PacketQueue.Count > 0) { packet = (PacketReader)PacketQueue.Dequeue(); } else { packet = new PacketReader(DataBuffer); } string clientInfo = ((IPEndPoint)clientSocket.RemoteEndPoint).Address + ":" + ((IPEndPoint)clientSocket.RemoteEndPoint).Port; PacketLog.WritePacket(clientInfo, null, packet); if (Enum.IsDefined(typeof(ClientMessage), packet.Opcode)) { PacketManager.InvokeHandler(ref packet, this, (ClientMessage)packet.Opcode); } else { Log.Message(LogType.DUMP, "UNKNOWN OPCODE: {0} (0x{1:X}), LENGTH: {2}", packet.Opcode, (ushort)packet.Opcode, packet.Size); } }
public void Send(PacketWriter packet) { if (packet.Opcode == 0) { return; } var buffer = packet.ReadDataToSend(); if (Crypt.IsInitialized) { uint totalLength = (uint)packet.Size - 2; totalLength <<= 12; totalLength |= ((uint)packet.Opcode & 0xFFF); var header = BitConverter.GetBytes(totalLength); Crypt.Encrypt(header); buffer[0] = header[0]; buffer[1] = header[1]; buffer[2] = header[2]; buffer[3] = header[3]; } var args = SocketAsyncEventArgsPool.Acquire(); args.SetBuffer(buffer, 0, buffer.Length); args.Completed += OnSend; try { if (!clientSocket.SendAsync(args)) { OnSend(this, args); } } catch (Exception ex) { args.Completed -= OnSend; SocketAsyncEventArgsPool.Release(args); Disconnect(); if (ex is ObjectDisposedException) { return; } if (ex is SocketException) { Log.outException(ex); return; } throw; } Log.outDebug("Sent Opcode: 0x{0:X} ({0}) to Player: {1}", packet.Opcode, GetAccount() == null ? 0 : GetAccountId()); PacketLog.WritePacket(clientSocket.RemoteEndPoint.ToString(), packet); }
public void OnData() { try { PacketReader packet = null; if (PacketQueue.Count > 0) { packet = (PacketReader)PacketQueue.Dequeue(); } else { packet = new PacketReader(ReceiveBuffer); } PacketLog.WritePacket(clientSocket.RemoteEndPoint.ToString(), null, packet); if (Enum.IsDefined(typeof(Opcodes), packet.Opcode)) { PacketManager.InvokeHandler(ref packet, this, (Opcodes)packet.Opcode); } else { Log.outDebug("Received unknown opcode 0x{0:X} ({0}) from AcountId:{1}", (ushort)packet.Opcode, GetAccountId()); } } catch (Exception ex) { Log.outException(ex); } }
public void OnData() { PacketReader packet = null; if (PacketQueue.Count > 0) { packet = (PacketReader)PacketQueue.Dequeue(); } else { packet = new PacketReader(DataBuffer); } string clientInfo = ((IPEndPoint)clientSocket.RemoteEndPoint).Address + ":" + ((IPEndPoint)clientSocket.RemoteEndPoint).Port; PacketLog.WritePacket(clientInfo, null, packet); PacketManager.InvokeHandler(ref packet, this); }
public void Send(ref PacketWriter packet) { if (packet.Opcode == 0) { return; } var buffer = packet.ReadDataToSend(); try { if (Crypt.IsInitialized) { uint totalLength = (uint)packet.Size - 2; totalLength <<= 13; totalLength |= ((uint)packet.Opcode & 0x1FFF); var header = BitConverter.GetBytes(totalLength); Crypt.Encrypt(header); buffer[0] = header[0]; buffer[1] = header[1]; buffer[2] = header[2]; buffer[3] = header[3]; } clientSocket.Send(buffer, 0, buffer.Length, SocketFlags.None); string clientInfo = ((IPEndPoint)clientSocket.RemoteEndPoint).Address + ":" + ((IPEndPoint)clientSocket.RemoteEndPoint).Port; PacketLog.WritePacket(clientInfo, packet); packet.Flush(); } catch (Exception ex) { Log.Message(LogType.ERROR, "{0}", ex.Message); Log.Message(); clientSocket.Close(); } }