public static void BeginReadPacket(Socket skt, ClientProcessor psr, Action<Packet> callback, Action failure) { byte[] n = new byte[5]; skt.BeginReceive(n, 0, 5, 0, ar => { try { byte[] x = (byte[])ar.AsyncState; int len = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(x, 0)); if (len == 0) { failure(); return; } len -= 5; byte id = x[4]; Packet packet = Packets[(PacketID)id].CreateInstance(); byte[] content = new byte[len]; if (len > 0) skt.Receive(content); packet.Read(psr, new NReader(new MemoryStream(packet.Crypt(psr, content)))); callback(packet); } catch { failure(); } }, n); }
public static Packet ReadPacket(NReader rdr, ClientProcessor psr) { int len = rdr.ReadInt32() - 5; byte id = rdr.ReadByte(); Packet packet = Packets[(PacketID)id].CreateInstance(); byte[] content = rdr.ReadBytes(len); packet.Read(psr, new NReader(new MemoryStream(packet.Crypt(psr, content)))); return packet; }
public static void WritePacket(NWriter wtr, Packet pkt, ClientProcessor psr) { MemoryStream s = new MemoryStream(); pkt.Write(psr, new NWriter(s)); byte[] content = s.ToArray(); content = pkt.Crypt(psr, content); wtr.Write(content.Length + 5); wtr.Write((byte)pkt.ID); wtr.Write(content); }
public byte[] Write(ClientProcessor psr) { var s = new MemoryStream(); Write(psr, new NWriter(s)); var content = s.ToArray(); var ret = new byte[5 + content.Length]; content = Crypt(psr, content, content.Length); Buffer.BlockCopy(BitConverter.GetBytes(IPAddress.HostToNetworkOrder(ret.Length)), 0, ret, 0, 4); ret[4] = (byte) ID; Buffer.BlockCopy(content, 0, ret, 5, content.Length); return ret; }
static void Listen(IAsyncResult ar) { try { Socket skt = svrSkt.EndAccept(ar); svrSkt.BeginAccept(Listen, null); var psr = new ClientProcessor(skt); psr.BeginProcess(); } catch (ObjectDisposedException) { } }
protected abstract void Read(ClientProcessor psr, NReader rdr);
public void Read(ClientProcessor psr, byte[] body, int len) { Read(psr, new NReader(new MemoryStream(Crypt(psr, body, len)))); }
public abstract byte[] Crypt(ClientProcessor psr, byte[] dat, int len);
public NetworkHandler(ClientProcessor parent, Socket skt) { this.parent = parent; this.skt = skt; }
protected override void Read(ClientProcessor psr, NReader rdr) { }
private static void Listen(IAsyncResult ar) { Socket skt = null; try { skt = svrSkt.EndAccept(ar); } catch (ObjectDisposedException) { } try { svrSkt.BeginAccept(Listen, null); } catch (ObjectDisposedException) { } if (skt != null) { var psr = new ClientProcessor(skt); psr.BeginProcess(); } }
protected abstract void Write(ClientProcessor psr, NWriter wtr);
public override byte[] Crypt(ClientProcessor psr, byte[] dat, int len) { return dat; }
protected override void Write(ClientProcessor psr, NWriter wtr) { }
public override byte[] Crypt(ClientProcessor psr, byte[] dat, int len) { return(dat); }