/// <summary> /// 받기 완료 /// </summary> /// <param name="e"></param> public void CompletedReceive(SocketAsyncEventArgs e) { Service.Logger.Log(LogLevel.Debug, string.Format("Session - recv완료 - ID:{0},len:{1},offset:{2},error:{3}", ID, e.BytesTransferred, e.Offset, e.SocketError.ToString())); if (e.BytesTransferred <= 0 || e.SocketError != SocketError.Success) { PostClose(CloseReason.RemoteClosing); _receiving.Off(); return; } _lastActivateTime = Environment.TickCount; bool eventFire = true; if (_messageResolver != null) { if (_messageResolver.OnReceive(this, new ArraySegment <byte>(e.Buffer, e.Offset, e.BytesTransferred))) { eventFire = false; } } if (eventFire) { Service.FireReceiveEvent(ID, e.Buffer, e.Offset, e.BytesTransferred); } PostReceive(); }
/// <summary> /// 이 매소드에서 직접 바이트 데이터를 해석해도 되지만 Message resolver클래스를 따로 둔 이유는 /// 추후에 확장성을 고려하여 다른 resolver를 구현할 때 CUserToken클래스의 코드 수정을 최소화 하기 위함이다. /// </summary> /// <param name="buffer"></param> /// <param name="offset"></param> /// <param name="transfered"></param> public void OnReceive(byte[] buffer, int offset, int transfered) { RefMsgResolver.OnReceive(buffer, offset, transfered, OnMessageCompleted); }