/// <summary> /// 获取远程端口 /// </summary> /// <param name="context"></param> /// <returns></returns> public static int GetRemotePort(this IChannelHandlerContext context) { var address = context.GetRemoteAddress(); return(address.Port); }
/// <summary> /// 获取远程IP与端口(IP:Port) /// </summary> /// <param name="context"></param> /// <returns></returns> public static string GetRemoteNetString(this IChannelHandlerContext context) { var address = context.GetRemoteAddress(); return($"{address.Address.ToString()}:{address.Port}"); }
/// <summary> /// 获取远程IP /// </summary> /// <param name="context"></param> /// <returns></returns> public static string GetRemoteIP(this IChannelHandlerContext context) { var address = context.GetRemoteAddress(); return(address.Address.ToString()); }
/// <summary> /// /// </summary> /// <param name="context"></param> /// <param name="message"></param> public override void ChannelRead(IChannelHandlerContext context, object message) { var msg = (Message)message; var loginState = ChannelState.GetLoginState(context); //如果是握手请求消息,处理,其它消息透传 if (msg.Header != null && msg.Header.Type == MessageType.LOGIN_REQ && loginState != null) { loginState.IsLoginSuccess = false; if (loginRecieveHandler != null) { Task.Run(() => { loginRecieveHandler(new LoginAuthInfo() { Body = msg.Body, Attachments = msg.Header.Attachments, RemoteAddress = context.GetRemoteAddress() }).ContinueWith(t => { var resData = t.Result; if (resData != null) { loginState.IsLoginSuccess = resData.AuthResult; loginState.Identity = resData.AuthIdentity; loginState.RemoteAddress = context.GetRemoteAddress(); if (loginState.IsLoginSuccess) { logger.LogInformation($"Login success. Local={context.GetLocalNetString()}, Remote={context.GetRemoteNetString()}"); var loginResp = BuildResponse(resData); context.WriteAndFlushAsync(loginResp); } else { logger.LogDebug($"Login failed. MessageType={msg.Header.Type}, Local={context.GetLocalNetString()}, Remote={context.GetRemoteNetString()}, AuthStatusCode={resData.AuthStatusCode}, AuthFailedMessage={resData.AuthFailedMessage}"); var loginResp = BuildResponse(resData); context.WriteAndFlushAsync(loginResp).ContinueWith(task => { context.CloseAsync(); }); } } else { logger.LogDebug($"Drop message because LoginResponseData is null. MessageType={msg.Header.Type}, Local={context.GetLocalNetString()}, Remote={context.GetRemoteNetString()}"); var loginResp = BuildResponse((byte)AuthStatusCodes.LoginResponseDataIsNull); context.WriteAndFlushAsync(loginResp).ContinueWith(task => { context.CloseAsync(); }); } }); }); } else { logger.LogDebug($"Drop message because LoginRecieveHandler is null. MessageType={msg.Header.Type}, Local={context.GetLocalNetString()}, Remote={context.GetRemoteNetString()}"); var loginResp = BuildResponse((byte)AuthStatusCodes.LoginRecieveHandlerIsNull); context.WriteAndFlushAsync(loginResp).ContinueWith(task => { context.CloseAsync(); }); } } else { if (loginState != null && loginState.IsLoginSuccess) { context.FireChannelRead(msg); } else { logger.LogDebug($"Drop message because no login. MessageType={msg.Header.Type}, Local={context.GetLocalNetString()}, Remote={context.GetRemoteNetString()}"); var loginResp = BuildResponse((byte)AuthStatusCodes.NoLogin); context.WriteAndFlushAsync(loginResp).ContinueWith(task => { context.CloseAsync(); }); } } }