Ejemplo n.º 1
0
    void OnReceive(IAsyncResult ar)
    {
        SocketAngent client    = ar.AsyncState as SocketAngent;
        SocketEntity socketEnt = client.socket;
        Socket       socket    = socketEnt.socket;

        try
        {
            int BytesRead = socket.EndReceive(ar);
            //if (BytesRead == 0)
            //    return;

            int count = 0;
            if (BytesRead <= 0)
            {
                socket.BeginDisconnect(true, new AsyncCallback(this.OnDisconnect), client);
                return;
            }
            socketEnt.buffer.writePosition = socketEnt.buffer.writePosition + BytesRead;
            while (true)
            {
                if (socketEnt.buffer.Read(socketEnt.countBytes, 0, sizeof(int)))
                {
                    count = System.BitConverter.ToInt32(socketEnt.countBytes, 0);
                    count = BinaryStream.ntohl(count);
                    if (socketEnt.buffer.validDataLength >= count)
                    {
                        if (socketEnt.buffer.Pop(socketEnt.recvPacket, 0, count))
                        {
                            MemoryStream read_stream = new MemoryStream(socketEnt.recvPacket, sizeof(int), count - sizeof(int));
                            this.OnReceive(read_stream.ToArray(), socketEnt);
                        }
                        else
                        {
                            break;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }
            }
            if (socketEnt.buffer.writeLength <= 0)
            {
                return;
            }
            socket.BeginReceive(socketEnt.buffer.buffer, socketEnt.buffer.writePosition, socketEnt.buffer.writeLength, 0, new AsyncCallback(this.OnReceive), client);
        }
        catch (SocketException)
        {
            this.OnDisconnect(ar);
        }
    }
Ejemplo n.º 2
0
 public void update()
 {
     if (eventList.Count > 0)
     {
         handle.WaitOne();
         SocketEvent  e      = eventList.Dequeue();
         SocketEntity a      = clientList.Dequeue();
         SocketAngent angent = a.angent;
         handle.Set();
         angent.dispatchEvent(e);
     }
 }