/// <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); }
/// <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(); }
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); } }