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