Exemplo n.º 1
0
 private void SocketListener_SocketReceiveCompleted(object sender, SocketReceiveCompletedEventArgs e)
 {
     if (this.SocketReceiveCompleted != null)
     {
         this.SocketReceiveCompleted(this, e);
     }
 }
Exemplo n.º 2
0
        private void RequestHandlerEngine_SocketReceiveCompleted(object sender, SocketReceiveCompletedEventArgs e)
        {
            if (e == null || (e != null && e.ReceivedSocketState == null))
            {
                return;
            }
            if (e.ReceivedSocketState.DataReceived == null)
            {
                return;
            }
            var _bytes = e.ReceivedSocketState.DataReceived;

            try
            {
                PacketBodyBase _packetBody = PacketUtil.UnPackRequest(_bytes);
                if (_packetBody == null)
                {
                    throw new UnPackException("解包后的数据包为空", null);
                }

                var             _packetType = (PacketType)Enum.Parse(typeof(PacketType), _packetBody.GetMsgId().ToString());
                IRequestHandler _handler    = null;

                if (typeof(RequestPacket).IsAssignableFrom(_packetBody.GetType()))
                {
                    switch (_packetType)
                    {
                    case PacketType.Register:
                        _handler = new RegisterHandler(); break;

                    case PacketType.Login:
                        _handler = new LoginHandler(); break;

                    default:
                        throw new NotSupportedPacketTypeException(string.Format("暂不支持类型为{0}的数据包", _packetBody.GetType().ToString()), _packetBody.GetType());
                    }
                }
                else
                {
                    throw new NotSupportedPacketTypeException(string.Format("暂不支持类型为{0}的数据包", _packetBody.GetType().ToString()), _packetBody.GetType());
                }

                _handler.Execute(_packetBody, e.ReceivedSocketState);
            }
            catch (ResponseException ex)
            {
                ex.Source += ".RequestHandlerEngine.RequestHandlerEngine_SocketReceiveCompleted";
                Logger.LogError(string.Format("处理来自{0}的请求后,发回响应包时出现异常,异常信息 = {1}", e.ReceivedSocketState.ClientIpAddress, ex));
            }
            catch (NotSupportedPacketTypeException ex)
            {
                var _response = new CommErrorResponse
                {
                    Status  = false,
                    Message = ResponseMessage.COMM_NOTSUPPORT_FUNCTION,
                };
                e.ReceivedSocketState.Response(PacketUtil.Pack(_response));

                ex.Source += ".RequestHandlerEngine.RequestHandlerEngine_SocketReceiveCompleted";
                Logger.LogError(string.Format("处理来自{0}的请求时,遇到未支持功能,异常信息 = {1}", e.ReceivedSocketState.ClientIpAddress, ex));
            }
            catch (UnPackException ex)
            {
                var _response = new CommErrorResponse
                {
                    Status  = false,
                    Message = ResponseMessage.COMM_NETWORK_ERROR,
                };
                e.ReceivedSocketState.Response(PacketUtil.Pack(_response));

                ex.Source += ".RequestHandlerEngine.RequestHandlerEngine_SocketReceiveCompleted";
                Logger.LogError(string.Format("处理来自{0}的请求时,解包失败,异常信息 = {1}", e.ReceivedSocketState.ClientIpAddress, ex));
            }
            catch (PackException ex)
            {
                var _response = new CommErrorResponse
                {
                    Status  = false,
                    Message = ResponseMessage.COMM_NETWORK_ERROR,
                };
                e.ReceivedSocketState.Response(PacketUtil.Pack(_response));

                ex.Source += ".RequestHandlerEngine.RequestHandlerEngine_SocketReceiveCompleted";
                Logger.LogError(string.Format("处理来自{0}的请求时,打包失败,异常信息 = {1}", e.ReceivedSocketState.ClientIpAddress, ex));
            }
            catch (Exception ex)
            {
                ex.Source += ".RequestHandlerEngine.RequestHandlerEngine_SocketReceiveCompleted";
                Logger.LogError(string.Format("处理来自{0}的请求时,出现异常,异常信息 = {1}", e.ReceivedSocketState.ClientIpAddress, ex));
            }
        }