Example #1
0
        /// <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();
        }
Example #2
0
 /// <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);
 }