private void _ProcEstablishEvent(LPNetEvent netEvent) { LPSocker socker = null; LPEstablishNetEvent establishEvent = null; if (LOG_ERROR(netEvent != null)) { goto Exit0; } establishEvent = (LPEstablishNetEvent)netEvent; socker = establishEvent.Socker; if (socker.IsAcceptCreate) { m_NetMessageHandler.OnAccepted(socker); } else { m_NetMessageHandler.OnConnected(socker); } socker.PostRecv(); Exit0: return; }
public void OnReceive(IAsyncResult ar) { bool result = false; int recvLen = 0; int useLen = 0; LPSocker socker = null; HandlerParam handlerParam = null; SocketError socketError = SocketError.SocketError; try { if (LOG_ERROR(ar != null)) { goto Exit0; } handlerParam = (HandlerParam)ar.AsyncState; if (LOG_ERROR(handlerParam != null)) { goto Exit0; } if (LOG_ERROR(handlerParam.HandlerType == EHandlerType.Socker)) { goto Exit0; } socker = (LPSocker)handlerParam.Handler; recvLen = socker.Sock.EndReceive(ar, out socketError); if (recvLen <= 0 || socketError != SocketError.Success) { result = LP.NetModule.EventMgr.PushTerminateEvent(socker); if (LOG_ERROR(result)) { goto Exit0; } } else { socker.RecvBuf.FinishWrite(recvLen); while (socker.RecvBuf.GetTotalReadableLen() > 0) { useLen = socker.PacketParser.Parse(socker.RecvBuf); if (0 == useLen) { //接收区已满,但还没有装下一个包,只好断开连接 if (socker.RecvBuf.GetTotalWritableLen() <= 0) { socker.Close(ESockerCloseType.RecvError, 1, false); if (LOG_ERROR(false)) { goto Exit0; } } break; } else if (useLen > 0) { if (useLen > socker.RecvBuf.GetTotalReadableLen()) { socker.Close(ESockerCloseType.RecvError, 2, false); if (LOG_ERROR(false)) { goto Exit0; } } result = LP.NetModule.EventMgr.PushRecvEvent(socker, socker.RecvBuf, useLen); if (!result) { socker.Close(ESockerCloseType.RecvError, 3, false); if (LOG_ERROR(false)) { goto Exit0; } } } else { socker.Close(ESockerCloseType.RecvError, 4, false); if (LOG_ERROR(false)) { goto Exit0; } } } socker.PostRecv(); } } catch (SocketException e) { LP.Logger.P_ERR("ErrorCode={0},SocketErrorCode={1}, Message:{2}, StackTrace:{3}", e.ErrorCode, e.SocketErrorCode, e.Message, e.StackTrace); } catch (Exception e) { LPMiniDump.GenerateNormalDump(e); } Exit0: return; }