public abstract Task Send(ServerPacket packet);
public override async Task Send(ServerPacket packet) { try { await Task.Run(() => { packet.Write(); packet.Packet.FinishData(); Crypt.Encrypt(packet.Packet.Data, packet.Packet.Data.Length); packet.Packet.Finish((ushort)ServerMessage.Composite); }); PacketLog.Write<ServerMessage>(packet.Packet.Header.Message, packet.Packet.Data, packet.Packet.Data.Length, client.RemoteEndPoint as IPEndPoint); var socketEventargs = new SocketAsyncEventArgs(); socketEventargs.SetBuffer(packet.Packet.Data, 0, packet.Packet.Data.Length); socketEventargs.Completed += SendCompleted; socketEventargs.UserToken = packet; socketEventargs.RemoteEndPoint = client.RemoteEndPoint; socketEventargs.SocketFlags = SocketFlags.None; client.SendAsync(socketEventargs); } catch { Dispose(); } }