Beispiel #1
0
        /// <summary>
        /// 创建组对象
        /// </summary>
        /// <returns></returns>
        public async override Task OnConnectedAsync()
        {
            await Console.Out.WriteLineAsync("SignalR链接初始");

            if (Context.User.Claims.Any())
            {
                await Console.Out.WriteLineAsync("SignalR链接成功");

                var Id    = Context.User.Claims.FirstOrDefault(x => x.Type == "Id").Value.ToGuid();
                var name  = Context.User.Claims.FirstOrDefault(x => x.Type == "userName").Value;
                var model = new SignalRModel
                {
                    UserId = Id,
                    SignalRConnectionId = Context.ConnectionId
                };
                await _redisCacheManager.Set(Id.ToString(), model);//将用户关联的ConnectionID放到缓存中

                await Console.Out.WriteLineAsync($"SignalR链接Id放入缓存成功;用户{name}");
            }
            else
            {
                await Console.Out.WriteLineAsync("Context.User.Claims未获取到用户信息!");
            }
            await base.OnConnectedAsync();
        }
        /// <summary>
        /// 扫码登录,   测试http://localhost:55030/Home/Login  http://localhost:55030/Home/ScanQrCode?id=1f5be1fc-4226-40cc-bbda-4a121e4087f3&userid=5
        /// </summary>
        /// <param name="id">二维码Id</param>
        /// <param name="userid">用户Id(前台发token,TokenValidate过滤解析得到userid)</param>
        /// <returns></returns>
        public JsonResult ScanQrCode(string id, int userid)
        {
            var signalRModel = new SignalRModel() { Id = id, Success = true, Message = "扫码登录成功", Url = "http://www.baidu.com" };
            new QrCodeLoginHub().SendToGroup(id, signalRModel);
            return Json(signalRModel);

            //  var signalRModel = new SignalRModel() { Id = id ,Success=false,Message="登录失败",Url=""};
            ////基本逻辑判断,
            //if (string.IsNullOrEmpty(id))
            //{
            //    signalRModel.Code = SignalRMessageCode.二维码不能为空;
            //    signalRModel.Message = "二维码不能为空";
            //}
            //else if (userid <0)
            //{
            //    signalRModel.Code = SignalRMessageCode.用户没有登录;
            //    signalRModel.Message = "用户没有登录";
            //}
            //var model = qrCodeLoginService.GetList(q => q.Id == id).FirstOrDefault();
            //if (model == null)
            //{
            //    signalRModel.Code = SignalRMessageCode.二维码不存在;
            //    signalRModel.Message = "二维码不存在";
            //}
            //else if(model.LoginTime== null)
            //{
            //    TimeSpan span = (TimeSpan)(DateTime.Now-model.CreateTime);
            //    if(span.TotalSeconds>60)
            //    {
            //        signalRModel.Code = SignalRMessageCode.二维码已过期;
            //        signalRModel.Message = "二维码已过期";
            //    }
            //    else
            //    {
            //        model.UserId = userid;
            //        model.LoginTime = DateTime.Now;
            //        qrCodeLoginService.UpdateEntityFields(model, new List<string>() { "UserId", "LoginTime" });

            //        signalRModel.Message = "登录成功";
            //        signalRModel.Success = true;
            //        signalRModel.Url = "/html/index.html#!home";
            //        signalRModel.Code = SignalRMessageCode.扫码登录成功;
            //    }
            //}
            //else
            //{
            //    signalRModel.Message = "此二维码已被其他用户登录,请刷新页面获取新二维码";
            //    signalRModel.Code = SignalRMessageCode.此二维码已被其他用户登录;
            //}
            //new QrCodeLoginHub().SendToGroup(id,signalRModel);
            //return Json(signalRModel);
        }
Beispiel #3
0
 /// <summary>
 /// 创建组对象
 /// </summary>
 /// <returns></returns>
 public async override Task OnConnectedAsync()
 {
     if (Context.User.Claims.Any())
     {
         var Id    = Context.User.Claims.FirstOrDefault(x => x.Type == "Id").Value.ToGuid();
         var name  = Context.User.Claims.FirstOrDefault(x => x.Type == "userName").Value.ToGuid();
         var model = new SignalRModel
         {
             UserId = Id,
             SignalRConnectionId = Context.ConnectionId
         };
         _redisCacheManager.Set(Id.ToString(), model, TimeSpan.Parse("1230"));//将用户关联的ConnectionID放到缓存中
     }
     await base.OnConnectedAsync();
 }
Beispiel #4
0
        public async Task Send(SignalRModel model)
        {
            model.Sender = UserCache.List.FirstOrDefault(en => en.ConnectionId == Context.ConnectionId).Name;
            List <string> connIds;

            if (model.Receiver.Length > 0)
            {
                connIds = model.Receiver.Select(en => UserCache.List.FirstOrDefault(u => u.PublicToken == en))
                          .Where(en => en?.Online ?? false).Select(en => en.ConnectionId).ToList();
            }
            else
            {
                connIds = UserCache.List.Where(en => en.Online).Select(en => en.ConnectionId).ToList();
            }
            model.Receiver = null;
            if (connIds.Count > 0)
            {
                await Clients.Clients(connIds).Receive(model);
            }
        }