public void Error(System.Exception e) { ErrorEvent evt = new ErrorEvent(this, e); evt.exception = e; EventLoop.EnqueuEvent(evt); }
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(); }