/// <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); } }
/// <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); }
/// <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); } }
/// <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()); } }