public async Task <ServiceResult <object> > Notify(int userId, string message, NotificationTypeEnum notificationType) { var user = Context.Users.FirstOrDefault(u => u.Id == userId); if (user == null) { return(NotFound("用户不存在")); } if (ConnectionService.IsOnline(userId)) { await HubContext.Clients.Client(ConnectionService.GetConnectionId(userId)).SendAsync("OnNotify", (int)notificationType, message); return(Success("在线通知成功")); } else { var notification = new Notification { Content = message, UserId = userId, NotificationType = notificationType }; Context.Notifications.Add(notification); await Context.SaveChangesAsync(); return(Success("离线通知保存成功")); } }
public async Task <string> JoinAsUser(int userId) { if (!XueLeMeContext.Users.Where(u => u.Id == userId).Any()) { return("账号不存在"); } var groups = XueLeMeContext.GroupMemberships.Where(m => m.UserId == userId).Select(m => m.ChatGroupId).ToList(); if (ConnectionService.IsOnline(userId)) { string connectionId = ConnectionService.GetConnectionId(userId); if (connectionId != Context.ConnectionId) { Logger.LogInformation("Force Out connection {0}, uid = {1}", Context.ConnectionId, userId); await Clients.Client(connectionId).SendAsync("OnNotify", (int)NotificationTypeEnum.ForceOut, "您的账号在别的设备被登录,可能是密码泄露,请重新登陆!"); ConnectionService.Detach(connectionId); } } ConnectionService.Attach(Context.ConnectionId, userId); foreach (var group in groups) { await Groups.AddToGroupAsync(Context.ConnectionId, group.ToString()); } return("成功与服务器建立连接"); }