public override async Task Process(LoginPacket packet, IPacketContext context)
        {
            var identityResult = await UserManager.AddLoginAsync(packet.Username, packet.Password);

            var errors      = (identityResult.Errors != null) ? identityResult.Errors.ToArray() : new string[0];
            var replyPacket = new LoginReplyPacket(identityResult.Success, errors);

            context.Sender.Send(replyPacket);

            if (replyPacket.Accepted)
            {
                var user = await UserManager.UserStorage.FindByNameAsync(packet.Username);

                var userConnection = TcpConnections.FindByEndpoint(context.Sender.EndPoint);
                userConnection.UserTag = user;

                NetPeer.OnClientConnected(user);

                this.NetPeer.Logger.LogInformation("User '{username}' authenticated ({address}).",
                                                   packet.Username, context.Sender.EndPoint.ToString());
            }
            else
            {
                this.NetPeer.Logger.LogInformation("User '{username}' failed to authenticated ({address}).",
                                                   packet.Username, context.Sender.EndPoint.ToString());
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 处理登陆应答
        /// <remark>abu 2008-03-08 </remark>
        /// </summary>
        /// <param name="packet">The packet.</param>
        private void ProcessLoginReply(LoginReplyPacket inPacket, LoginPacket outPacket)
        {
            QQEventArgs <LoginReplyPacket, LoginPacket> e = new QQEventArgs <LoginReplyPacket, LoginPacket>(client, inPacket, outPacket);

            switch (inPacket.ReplyCode)
            {
            case ReplyCode.OK:
                // 登陆成功的话我们就设置用户的一些信息,然后触发事件
                user.SessionKey    = inPacket.SessionKey;
                user.IP            = inPacket.IP;
                user.ServerIp      = inPacket.ServerIP;
                user.LastLoginIp   = inPacket.LastLoginIP;
                user.Port          = inPacket.Port;
                user.ServerPort    = inPacket.ServerPort;
                user.LoginTime     = inPacket.LoginTime;
                user.LastLoginTime = inPacket.LastLoginTime;
                user.ClientKey     = inPacket.ClientKey;
                user.AuthToken     = inPacket.AuthToken;
                // 得到文件传输密钥
                client.LoginManager.OnLoginSuccessed(e);
                break;

            case ReplyCode.LOGIN_FAIL:
                //登录失败
                client.LoginManager.OnLoginFailed(e);
                break;

            case ReplyCode.LOGIN_REDIRECT:
                if (Utils.Util.IsIPZero(inPacket.RedirectIP))
                {
                    client.LoginManager.OnLoginRedirectNull(e);
                }
                else
                {
                    client.LoginManager.OnLoginRedirect(e);
                }
                break;

            default:
                client.LoginManager.OnLoginUnknownError(e);
                break;
            }
        }