private void Accept(IAsyncResult ar) { TcpListener tcpListener = (TcpListener)ar.AsyncState; TcpClient client = tcpListener.EndAcceptTcpClient(ar); Vdb.Session newSession = new Vdb.Session(); newSession.client = client; sessions.Add(newSession); OnAcceptClient(newSession); client.GetStream().BeginRead(newSession.readBuffer, 0, 4096, new AsyncCallback(Read), newSession); }
private void Read(IAsyncResult ar) { Vdb.Session session = (Vdb.Session)ar.AsyncState; int readed = session.client.GetStream().EndRead(ar); // Packet Header if (readed < 0) { return; } Byte[] sizeBuffer = new Byte[4]; Array.Copy(session.readBuffer, sizeBuffer, 4); int packetSize = BitConverter.ToInt32(sizeBuffer, 0); if (readed < packetSize + 4) { return; } byte[] packetBuffer = new byte[packetSize]; Array.Copy(session.readBuffer, 4, packetBuffer, 0, packetSize); Network.PacketParser.ParseAndDeliver(packetHandler, session, packetBuffer); }
public void CloseSession(Vdb.Session session) { session.client.Close(); sessions.Remove(session); }