Пример #1
0
        public string queryTest(string code, int aa)
        {
            var user = new Modules.Users()
            {
                UserName      = "******",
                Password      = "******",
                RegisterIP    = "1",
                Token         = "2",
                Amount        = 0,
                RegisterTime  = DateTime.Now,
                LastLoginTime = DateTime.Now,
                status        = 0
            };

            _DbContext.Users.Add(user);
            _DbContext.SaveChanges();
            return(code + aa.ToString());
        }
        public RegisterResponse Register(RegisterRequest request)
        {
            var user = _DbContext.Users.FirstOrDefault(x => x.UserName == request.UserInfo.UserName);

            if (user != null)
            {
                return new RegisterResponse()
                       {
                           Code = -1, Msg = "用户已存在"
                       }
            }
            ;

            var salt = _Configuration.GetValue <string>("salt");

            user               = new Modules.Users();
            user.UserName      = request.UserInfo.UserName;
            user.Email         = request.UserInfo.Email;
            user.Password      = string.IsNullOrWhiteSpace(salt) ? request.UserInfo.Password : ComputeSha256Hash(salt + request.UserInfo.Password);
            user.RegisterIP    = Request.HttpContext.Connection.RemoteIpAddress.ToString();
            user.RegisterTime  = DateTime.Now;
            user.LastLoginTime = DateTime.Now;
            user.status        = 0;
            user.Amount        = 0;
            _DbContext.Users.Add(user);
            _DbContext.SaveChanges();

            #region 填充返回值
            return(new RegisterResponse()
            {
                Code = 0,
                Msg = "注册成功!",
            });

            #endregion
        }
        public async Task <LoginResponse> Login(LoginRequest request)
        {
            Modules.Users user             = null;
            Func <Task <LoginResponse> > f = async() =>
            {
                if (request.UserInfo.UserID != null)
                {
                    user = _DbContext.Users.FirstOrDefault(x => x.Id == request.UserInfo.UserID);
                }
                if (!string.IsNullOrWhiteSpace(request.UserInfo.UserName) && user != null)
                {
                    user = _DbContext.Users.FirstOrDefault(x => x.UserName == request.UserInfo.UserName);
                }
                if (user == null)
                {
                    return new LoginResponse()
                           {
                               Code = -1, Msg = "用户不存在"
                           }
                }
                ;

                var salt     = _Configuration.GetValue <string>("salt");
                var password = string.IsNullOrWhiteSpace(salt) ? request.UserInfo.Password : ComputeSha256Hash(salt + request.UserInfo.Password);
                if (user.Password != password)
                {
                    return new LoginResponse()
                           {
                               Code = -1, Msg = "密码不正确"
                           }
                }
                ;

                //如果用户的Token不是空的,尝试从redis清理旧的
                if (!string.IsNullOrWhiteSpace(user.Token))
                {
                    user = await _Redis.HashGetAsync <Modules.Users>("Users", user.Token);

                    await _Redis.HashDeleteAsync("Users", user.Token);
                }
                user.Token         = ComputeSha256Hash(salt + DateTime.Now.ToString("yyyyMMddHHmmss"));
                user.LastLoginTime = DateTime.Now;
                await _Redis.HashSetAsync <Modules.Users>("Users", user.Token, user);

                await _DbContext.SaveChangesAsync();

                return(new LoginResponse()
                {
                    Code = 0,
                    Msg = "成功!",
                    UserInfo = new UserInfo()
                    {
                        UserID = user.Id,
                        UserName = user.UserName,
                        Email = user.Email,
                        Amount = user.Amount,
                        Token = user.Token,
                    }
                });
            };

            #region 填充返回值
            return(await f());

            #endregion
        }
    }//End Class
}
Пример #4
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public async Task Run()
        {
            while (!CancellationTokenSource.IsCancellationRequested)
            {
                var buff   = new ArraySegment <byte>(new byte[1024 * 1024 * 1]);//1M缓冲区
                var result = await _WS.ReceiveAsync(buff, CancellationTokenSource.Token);

                if (result.MessageType != WebSocketMessageType.Text)
                {
                    continue;
                }
                var msg     = Encoding.UTF8.GetString(buff.Array).Trim();
                var msgbase = JsonConvert.DeserializeObject <Messages.MessageBase>(msg);
                switch (msgbase.MessageType)
                {
                    #region 查询方块
                case Enums.MessageType.queryBlocks:
                {
                    var param  = JsonConvert.DeserializeObject <Messages.QueryBlocks>(msgbase.Params);
                    var blocks = await _MapAccessQueue.AddTaskAsync2(queryBlocks, param);

                    var messageresult = new Messages.MessageBase()
                    {
                        MessageType = Enums.MessageType.queryBlocks,
                        Params      = JsonConvert.SerializeObject(blocks)
                    };
                    await _WS.SendAsync(new ArraySegment <byte>(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(messageresult))), WebSocketMessageType.Text, true, CancellationTokenSource.Token);

                    break;
                }

                    #endregion
                    #region 登录
                case Enums.MessageType.Login:
                {
                    var messageresult = await Task.Factory.StartNew <Messages.MessageBaseResponse>(async() =>
                        {
                            var param = JsonConvert.DeserializeObject <Messages.Login>(msgbase.Params);
                            if (_user != null)
                            {
                                return new Messages.MessageBaseResponse()
                                {
                                    Code = -1, Msg = "您已经登录过了!"
                                }
                            }
                            ;
                            //首先在redis里查询
                            _user = await _Redis.HashGetAsync <Modules.Users>("Users", param.Token);
                            if (_user == null)
                            {
                                return new Messages.MessageBaseResponse()
                                {
                                    Code = -1, Msg = "无效的Token!"
                                }
                            }
                            ;


                            _user = await _MapAccessQueue.AddTaskAsync2(Login, param);
                            return(new Messages.MessageBaseResponse()
                            {
                                Code = 0, Msg = "登录成功!"
                            });
                        });

                    await _WS.SendAsync(new ArraySegment <byte>(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(messageresult))), WebSocketMessageType.Text, true, CancellationTokenSource.Token);

                    break;
                }

                    #endregion
                default:    //默认
                    break;
                }
            } //End While
        }