예제 #1
0
        public void Error(System.Exception e)
        {
            ErrorEvent evt = new ErrorEvent(this, e);

            evt.exception = e;
            EventLoop.EnqueuEvent(evt);
        }
예제 #2
0
            private void OnEndReceive(IAsyncResult result)
            {
                last_recv_time = DateTime.Now;
                try
                {
                    Socket socket        = (Socket)result.AsyncState;
                    Int32  recvBytesSize = socket.EndReceive(result);
                    if (0 == recvBytesSize)
                    {
                        EventLoop.EnqueuEvent(new CloseEvent(session));
                        return;
                    }
                    receiveBuffer.Append(this.receiveBytes, 0, recvBytesSize);
                }
                catch (ObjectDisposedException e)
                {
                    Debug.Log(e.Message);
                    //EventLoop.EnqueuEvent(new CloseEvent(session));
                    return;
                }
                catch (SocketException e)
                {
                    Debug.Log(e.Message);
                    EventLoop.EnqueuEvent(new CloseEvent(session));
                    return;
                }

                while (Packet.HEADER_SIZE <= receiveBuffer.Size())
                {
                    Packet packet = new Packet(receiveBuffer);
                    if (packet.Length > Gamnet.Buffer.MAX_BUFFER_SIZE)
                    {
                        EventLoop.EnqueuEvent(new CloseEvent(session));
                        return;
                    }

                    if (packet.Length > receiveBuffer.Size())
                    {
                        // not enough
                        BeginReceive();
                        return;
                    }

                    receiveBuffer.Remove(packet.Length);
                    receiveBuffer = new Buffer(receiveBuffer);

                    EventLoop.EnqueuEvent(new ReceiveEvent(session, packet));
                }

                BeginReceive();
            }