private void BodyCallback(IAsyncResult ar) { try { int received = 0; ConnectionHandler connHandler = (ConnectionHandler)ar.AsyncState; received = connHandler.ClientSocket.EndReceive(ar); if (received == 0) { return; } HeapByteBuf bodyBuffer = new HeapByteBuf(connHandler.ReceiveBuffer, received); connHandler.ParsePacket(bodyBuffer); connHandler.ParsingPacket = false; connHandler.ReceiveBuffer = new byte[4]; connHandler.ClientSocket.BeginReceive(connHandler.ReceiveBuffer, 0, connHandler.ReceiveBuffer.Length, SocketFlags.None, new AsyncCallback(HeaderCallback), connHandler); } catch (Exception e) { Console.WriteLine("Exception: {0}", e); } }
private void HeaderCallback(IAsyncResult ar) { try { int received = 0; ConnectionHandler connHandler = (ConnectionHandler)ar.AsyncState; received = connHandler.ClientSocket.EndReceive(ar); if (received == 0) { return; } HeapByteBuf headerBuffer = new HeapByteBuf(connHandler.ReceiveBuffer, received); ushort type = headerBuffer.ReadUnsignedShort(); ushort length = headerBuffer.ReadUnsignedShort(); connHandler.ParsingPacket = true; connHandler.ParsingPacketId = type; connHandler.ReceiveBuffer = new byte[length]; connHandler.ClientSocket.BeginReceive(connHandler.ReceiveBuffer, 0, connHandler.ReceiveBuffer.Length, SocketFlags.None, new AsyncCallback(BodyCallback), connHandler); } catch (Exception e) { Console.WriteLine("Exception: {0}", e); } }
internal void ParsePacket(HeapByteBuf body, ushort packetId) { AbstractPacket packet = PacketRegistry.CreateInstance(packetId); packet.ReadFrom(body); this.HandlePacket(packet); }
internal async void ReadAsync() { DataReader reader; StringBuilder strBuilder; using (reader = new DataReader(socket.InputStream)) { strBuilder = new StringBuilder(); reader.ByteOrder = ByteOrder.BigEndian; await reader.LoadAsync(4); ushort packetId = reader.ReadUInt16(); ushort length = reader.ReadUInt16(); await reader.LoadAsync(length); byte[] data = new byte[length]; reader.ReadBytes(data); HeapByteBuf buf = new HeapByteBuf(data, length); this.ParsePacket(buf, packetId); reader.DetachStream(); } }
internal async Task SendPacketAsync(AbstractPacket packet) { DataWriter writer; using (writer = new DataWriter(socket.OutputStream)) { writer.ByteOrder = ByteOrder.BigEndian; HeapByteBuf dataBuf = new HeapByteBuf(16, 4096); packet.WriteTo(dataBuf); writer.WriteUInt16(packet.Id); writer.WriteUInt16((ushort)dataBuf.WriterIndex); writer.WriteBytes(dataBuf.GetBackingArray()); try { await writer.StoreAsync(); } catch (Exception exception) {} await writer.FlushAsync(); writer.DetachStream(); } }
public abstract void WriteTo(HeapByteBuf buffer);
public abstract void ReadFrom(HeapByteBuf buffer);
public void Test() { HeapByteBuf buf = new HeapByteBuf(10, 50); }
public override void WriteTo(HeapByteBuf buffer) { buffer.WriteString(this.Username); }
public override void ReadFrom(HeapByteBuf buffer) { this.Username = buffer.ReadString(); }