Пример #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="context"></param>
        /// <param name="message"></param>
        public override void ChannelRead(IChannelHandlerContext context, object message)
        {
            var msg = (Message)message;

            RequestManager requestManager = null;

            if (serviceResponseHandler != null)
            {
                var channelName = context.GetChannelName();
                requestManager = serviceResponseHandler(channelName);
            }

            //如果是服务响应消息,处理,其它消息透传
            if (msg.Header != null && msg.Header.Type == MessageType.SERVICE_RESP)
            {
                logger.LogDebug($"Get request result. Local={context.GetLocalNetString()}, Remote={context.GetRemoteNetString()}");
                if (requestManager != null)
                {
                    requestManager.CompleteRequest(msg.Header.RequestId, msg);
                }
            }
            else
            {
                context.FireChannelRead(message);
            }
        }
Пример #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="context"></param>
        public async override void ChannelInactive(IChannelHandlerContext context)
        {
            logger.LogInformation($"Channel inactived. Local={context.GetLocalNetString()}, Remote={context.GetRemoteNetString()}");
            base.ChannelInactive(context);

            var channelName = context.GetChannelName();
            await inactiveHandler?.Invoke(channelName);
        }
Пример #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="context"></param>
        /// <param name="message"></param>
        public override void ChannelRead(IChannelHandlerContext context, object message)
        {
            var msg = (Message)message;

            //如果是握手应答消息,需要判断是否认证成功
            if (msg.Header != null && msg.Header.Type == MessageType.LOGIN_RESP)
            {
                if (loginResponseHandler != null)
                {
                    Task.Run(() =>
                    {
                        var channelName = context.GetChannelName();
                        loginResponseHandler(channelName, msg.Body, msg.Header.Attachments).ContinueWith(t =>
                        {
                            var loginResult = t.Result;
                            if (loginResult == 0)
                            {
                                logger.LogInformation($"Login success. Local={context.GetLocalNetString()}, Remote={context.GetRemoteNetString()}, Message={msg}");
                            }
                            else
                            {
                                logger.LogError($"Login failed. Local={context.GetLocalNetString()}, Remote={context.GetRemoteNetString()}, LoginResult={loginResult}");
                                //握手失败
                                context.CloseAsync();
                            }
                        });
                    });
                }
                else
                {
                    var loginResult = msg.Body;
                    if (loginResult.Length != 1 || loginResult[0] != (byte)0)
                    {
                        logger.LogError($"Login failed. Local={context.GetLocalNetString()}, Remote={context.GetRemoteNetString()}, LoginResult={loginResult[0]}");
                        //握手失败
                        context.CloseAsync();
                    }
                    else
                    {
                        logger.LogInformation($"Login success. Local={context.GetLocalNetString()}, Remote={context.GetRemoteNetString()}, Message={msg}");
                        context.FireChannelRead(message);
                    }
                }
            }
            else
            {
                context.FireChannelRead(message);
            }
        }
Пример #4
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="context"></param>
 public override void ChannelActive(IChannelHandlerContext context)
 {
     if (getLoginRequestDataHandler != null)
     {
         var channelName = context.GetChannelName();
         getLoginRequestDataHandler(channelName).ContinueWith((t) =>
         {
             context.WriteAndFlushAsync(BuildLoginReq(t.Result));
         });
     }
     else
     {
         context.WriteAndFlushAsync(BuildLoginReq());
     }
 }