// Hàm xử lý nếu có user connect private void UserConnect(string connectId, string name) { using (var db = new OZChatDbContext()) { var user = db.HubUsers.FirstOrDefault(p => p.UserName == name); Connection oConnection = new Connection(); if (user.Connected != true) { Clients.Others.connect(connectId, name, user.FullName, user.ID); oConnection.UserID = user.ID; oConnection.ConnectionID = connectId; db.Connection.Add(oConnection); user.Connected = true; db.SaveChanges(); CommonStatic.AddOnlineUser(user); } else { Clients.Others.connect(connectId, name, user.FullName, user.ID); oConnection.UserID = user.ID; oConnection.ConnectionID = connectId; db.Connection.Add(oConnection); db.SaveChanges(); CommonStatic.AddOnlineUser(user); } GetAllGroup(); GetAllUser(); GetAllMessageUser(); JoinRoom(); } }
private void AddUserMessagePrivate(string fromUserId, string recieveId, bool isNew, List <Connection> listConnection) { var hubContext = Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext <ChatHub>(); using (var db = new OZChatDbContext()) { // Kiểm tra xem user đã từng nhắn tin với mình chưa var user = db.UserMessagePrivates.FirstOrDefault(p => p.FromUserID == fromUserId && p.RecieveUserID == recieveId); // Nếu 2 user chưa từng nhắn tin với nhau // Thêm vào danh sách đã nhắn tin với nhau if (user == null) { // 2 user đang không tương tác với nhau if (isNew == true) { for (var i = 0; i < listConnection.Count(); i++) { hubContext.Clients.Client(listConnection[i].ConnectionID).addCountMessagePrivate(fromUserId); } //hubContext.Clients.Client(connectId).addCountMessagePrivate(fromUserId); db.UserMessagePrivates.Add(new UserMessagePrivate { FromUserID = fromUserId, RecieveUserID = recieveId, NewMessage = 1 }); db.SaveChanges(); GetAllMessageUser(); GetAllMessageUser(recieveId, listConnection); } else { db.UserMessagePrivates.Add(new UserMessagePrivate { FromUserID = fromUserId, RecieveUserID = recieveId, NewMessage = 0 }); db.SaveChanges(); GetAllMessageUser(); GetAllMessageUser(recieveId, listConnection); } } else { // Nếu 2 user đã từng nhắn tin với nhau và đang không tương tác với nhau if (isNew == true) { for (int i = 0; i < listConnection.Count(); i++) { hubContext.Clients.Client(listConnection[i].ConnectionID).addCountMessagePrivate(fromUserId); } //hubContext.Clients.Client(connectId).addCountMessagePrivate(fromUserId); user.NewMessage += 1; db.SaveChanges(); } } } }
// ------------ PRIVATE MESSAGE -------------------- // Hàm lấy ra tất cả tin nhắn giữa bạn và 1 user nào đó public async Task getAllMessagePrivate(string userId) { var id = Context.User.Identity.GetUserId(); var connectId = Context.ConnectionId; using (var db = new OZChatDbContext()) { var messagePrivates = db.MessagePrivates .Where(p => (p.FromID == id && p.ReceiveID == userId) || p.FromID == userId && p.ReceiveID == id).OrderByDescending(p => p.ID).Take(50).ToList(); await Clients.Caller.messagePrivates(messagePrivates.OrderBy(p => p.ID).ToList(), id); var userMessage = db.UserMessagePrivates.FirstOrDefault(p => p.FromUserID == userId && p.RecieveUserID == id); if (userMessage != null) { Clients.Caller.devCountMessagePrivate(userId, userMessage.NewMessage); userMessage.NewMessage = 0; db.SaveChanges(); } //Kiểm tra user bạn muốn tương tác có đang online không var onlineUser = CommonStatic.OnlineUsers.FirstOrDefault(p => p.ID == userId); CommonStatic.RemoveInteractives(id); if (onlineUser != null) { //Nếu có thì thêm vào danh sách tương tác Clients.Caller.userInteractive(userId, true); CommonStatic.AddInteractive(id, userId); } } removeInteracGroup(); }
// Hàm xử lý nếu có user disconnect private void UserDisConnect(string connectId, string name) { using (var db = new OZChatDbContext()) { var user = db.HubUsers.FirstOrDefault(p => p.UserName == name); if (user.Connected == true) { Clients.Others.disConnect(name, user.FullName, user.ID); var listConnection = db.Connection.Where(p => p.UserID == user.ID).ToList(); Boolean isRemoveConnection = false; for (var i = 0; i < listConnection.Count(); i++) { if (listConnection[i].ConnectionID == connectId) { db.Connection.Remove(listConnection[i]); isRemoveConnection = true; } } if (isRemoveConnection == true && listConnection.Count == 1) { user.Connected = false; } db.SaveChanges(); if (isRemoveConnection == true && listConnection.Count == 1) { CommonStatic.RemoveOnlineUser(user.ID); } CommonStatic.RemoveInteractives(user.ID); CommonStatic.RemoveInteracGroup(user.ID); } } //LeaveRoom(); }
// Hàm xóa nhóm public async Task removeGroup(int groupId, string groupName) { string userId = Context.User.Identity.GetUserId(); using (var db = new OZChatDbContext()) { var userGroup = db.HubUserGroups.FirstOrDefault(p => p.UserID == userId && p.GroupID == groupId && p.IsCreater == true); if (userGroup != null) { var listUserGroup = db.HubUserGroups.Where(p => p.GroupID == groupId).ToList(); db.HubUserGroups.RemoveRange(listUserGroup); var listMessGroup = db.MessageGroups.Where(p => p.GroupID == groupId).ToList(); db.MessageGroups.RemoveRange(listMessGroup); var group = db.Groups.FirstOrDefault(p => p.ID == groupId); if (group != null) { db.Groups.Remove(group); } db.SaveChanges(); await Clients.Caller.successOutGroup(groupId, "Nhóm " + groupName + " đã được xóa!"); } else { await Clients.Caller.alertMessage("Chỉ có người tạo nhóm mới được xóa!", false); } } }
public async Task <ActionResult> Register(RegisterViewModel model) { ModelState.Remove("Id"); if (ModelState.IsValid) { if (string.IsNullOrEmpty(model.Avatar)) { model.Avatar = "/Content/plugins/dist/img/avatar5.png"; } var newUser = new ApplicationUser { UserName = model.Email, Email = model.Email, FullName = model.FullName, Avartar = model.Avatar, CommonPassword = model.Password }; var result = await UserManager.CreateAsync(newUser, model.Password); if (result.Succeeded) { var user = await _userManager.FindByEmailAsync(model.Email); var hubUser = new HubUser(); //{ // ID = user.Id, // Email = user.Email, // UserName = user.UserName, // FullName = user.FullName, // Avatar = user.Avartar, // ConnectionId = new List<Connection>(), // Connected = false //}; _dbContext.HubUsers.Add(hubUser); _dbContext.SaveChanges(); var addRole = await _userManager.AddToRoleAsync(user.Id, "User"); if (addRole.Succeeded) { TempData["success"] = "Thêm mới thành viên thành công!"; return(RedirectToAction("Register", "Account")); } } } // If we got this far, something failed, redisplay form return(View(model)); }
//Cập nhật thành viên của nhóm public async Task updateUserGroup(List <string> listChecked, string groupName, List <string> listUnCheck = null) { listUnCheck = listUnCheck ?? new List <String>(); if (!string.IsNullOrEmpty(groupName)) { Group group = null; using (var _db = new OZChatDbContext()) { // Kiem tra group da ton tai chua group = _db.Groups.FirstOrDefault(p => p.Name == groupName); // Neu chua thi tao moi if (group == null) { await Clients.Caller.alertMessage("Nhóm " + groupName + " không tồn tại!", false); } else { // Thêm danh sách user đc chọn vào nhóm foreach (var item in listChecked) { var user = _db.Users.FirstOrDefault(p => p.UserName == item); if (user != null) { HubUserGroup groupUser = _db.HubUserGroups.FirstOrDefault(p => p.GroupID == group.ID && p.UserID == user.Id); if (groupUser == null) { _db.HubUserGroups.Add(new HubUserGroup { GroupID = group.ID, UserID = user.Id, IsCreater = false }); } } } foreach (var item in listUnCheck) { var user = _db.Users.FirstOrDefault(p => p.UserName == item); if (user != null) { HubUserGroup groupUser = _db.HubUserGroups.FirstOrDefault(p => p.GroupID == group.ID && p.UserID == user.Id); if (groupUser != null) { _db.HubUserGroups.Remove(groupUser); } } } _db.SaveChanges(); await GetUserOfGroup(group.ID); await Clients.Caller.alertMessage("Thêm mới thành viên thành công!", true); } } } }
public void removeFCMToken(FormCollection fc) { using (var db = new OZChatDbContext()) { var fcmToken = fc["fcmToken"]; if (fcmToken != null) { FcmConnection oFcmConnection = db.FcmConnection.Where(p => p.DeviceToken == fcmToken).FirstOrDefault(); if (oFcmConnection != null) { db.FcmConnection.Remove(oFcmConnection); db.SaveChanges(); } } } }
//Thêm thành viên vào nhóm public async Task addUserGroup(List <string> listChecked, string groupName) { // Thêm nhóm if (!string.IsNullOrEmpty(groupName)) { Group group = null; using (var _db = new OZChatDbContext()) { // Kiem tra group da ton tai chua group = _db.Groups.FirstOrDefault(p => p.Name == groupName); // Neu chua thi tao moi if (group == null) { group = createGroup(groupName); // Thêm danh sách user đc chọn vào nhóm foreach (var item in listChecked) { var user = _db.Users.FirstOrDefault(p => p.UserName == item); if (user != null) { var groupUser = _db.HubUserGroups.FirstOrDefault(p => p.GroupID == group.ID && p.UserID == user.Id); if (groupUser == null) { _db.HubUserGroups.Add(new HubUserGroup { GroupID = group.ID, UserID = user.Id, IsCreater = false }); } } } Clients.Caller.createGroupSuccess(group.Name, group.ID); await Clients.Caller.alertMessage("Tạo nhóm mới thành công!", true); _db.SaveChanges(); } else { await Clients.Caller.alertMessage("Nhóm " + groupName + " đã tồn tại!", false); } } } }
public void addDeviceTokenFCM(string deviceToken) { string id = Context.User.Identity.GetUserId(); string name = Context.User.Identity.Name; using (var db = new OZChatDbContext()) { var hubUser = db.HubUsers.FirstOrDefault(p => p.UserName == name); List <FcmConnection> listFcmConnection = db.FcmConnection.Where(p => p.DeviceToken == deviceToken).ToList(); if (hubUser != null && listFcmConnection.Count == 0) { FcmConnection oFcmConnection = new FcmConnection(); oFcmConnection.DeviceToken = deviceToken; oFcmConnection.UserID = hubUser.ID; db.FcmConnection.Add(oFcmConnection); db.SaveChanges(); } } }
//Hàm rời khỏi nhóm public async Task outFromGroup(int groupId, string groupName) { string userId = Context.User.Identity.GetUserId(); using (var db = new OZChatDbContext()) { var userGroup = db.HubUserGroups.FirstOrDefault(p => p.UserID == userId && p.GroupID == groupId); if (userGroup != null) { db.HubUserGroups.Remove(userGroup); db.SaveChanges(); await Clients.Caller.successOutGroup(groupId, "Bạn đã rời khỏi nhóm " + groupName); } else { await Clients.Caller.alertMessage("Nhóm " + groupName + " không tồn tại!", false); } } }
private void CreateHubUser(OZChatDbContext context) { var user = context.Users.FirstOrDefault(p => p.Email == "*****@*****.**"); if (user != null) { var hubUser = new HubUser(); //{ // ID = user.Id, // Email = user.Email, // UserName = user.UserName, // FullName = user.FullName, // Avatar = user.Avartar, // ConnectionId = new List<Connection>(), // Connected = false //}; context.HubUsers.Add(hubUser); context.SaveChanges(); } }
// -------- GROUP ---------------- //Hàm thêm mới 1 nhóm private Group createGroup(string groupName) { string userId = Context.User.Identity.GetUserId(); using (var _db = new OZChatDbContext()) { var newGroup = new Group { Name = groupName }; _db.Groups.Add(newGroup); var groupUser = new HubUserGroup { GroupID = newGroup.ID, UserID = userId, IsCreater = true }; _db.HubUserGroups.Add(groupUser); _db.SaveChanges(); return(newGroup); } }
//Hàm lấy ra toàn bộ tin nhắn của 1 nhóm public async Task getAllGroupMessage(int groupId) { var userId = Context.User.Identity.GetUserId(); using (var db = new OZChatDbContext()) { var messages = db.MessageGroups.Where(p => p.GroupID == groupId).OrderByDescending(p => p.ID).Take(50).ToList(); await Clients.Caller.allGroupMessage(messages.OrderBy(p => p.ID).ToList(), userId); var newMessage = db.NewMessageGroups.FirstOrDefault(p => p.UserID == userId && p.GroupID == groupId); if (newMessage != null) { await Clients.Caller.devCountMessageGroup(groupId, newMessage.Count); db.NewMessageGroups.Remove(newMessage); db.SaveChanges(); } } // Xóa tương tác cũ sau đó thêm tương tác mới CommonStatic.RemoveInteracGroup(userId); CommonStatic.AddInteracGroup(userId, groupId); removeInteracPrivate(); }
// Xóa thành viên khỏi nhóm public async Task removeUserFromGroup(string userId, int groupId, string groupName) { string id = Context.User.Identity.GetUserId(); using (var db = new OZChatDbContext()) { var groupUser = db.HubUserGroups.FirstOrDefault(p => p.UserID == userId && p.GroupID == groupId); if (groupUser != null) { var creater = db.HubUserGroups.FirstOrDefault(p => p.UserID == id && p.GroupID == groupId); if (creater.IsCreater == true) { db.HubUserGroups.Remove(groupUser); db.SaveChanges(); await Clients.Caller.alertMessage("Thành viên đã được xóa khỏi nhóm!", true); await GetUserOfGroup(groupId); } else { await Clients.Caller.alertMessage("Người tạo nhóm mới có quyền xóa!", false); } } } }
//Thêm tin nhắn vào group public async Task addMessageToGroup(int groupId, string groupName, string message) { var hubContext = Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext <ChatHub>(); var userId = HttpContext.User.Identity.GetUserId(); var username = HttpContext.User.Identity.Name; var fullname = HttpContext.User.Identity.GetUserFullName(); var avatar = HttpContext.User.Identity.GetUserAvatar(); using (var _db = new OZChatDbContext()) { // Tạo mới 1 tin nhắn string strDateTime = String.Format("{0:dd/MM/yyyy HH:mm}", DateTime.Now); var newMessage = new MessageGroup { FromID = userId, GroupID = groupId, FromFullName = fullname, FromAvatar = avatar, Content = message, CreatedDate = DateTime.Now, StrDateTime = strDateTime, IsFile = true }; var listConnectionSend = _db.Connection.Where(p => p.UserID == userId).ToList(); List <String> excludeSendList = new List <string>(); for (var i = 0; i < listConnectionSend.Count; i++) { excludeSendList.Add(listConnectionSend[i].ConnectionID); } // Gửi tin nhắn tới nhóm var meUser = CommonStatic.OnlineUsers.FirstOrDefault(p => p.ID == userId); await hubContext.Clients.Group(groupName, excludeSendList.ToArray()).groupMessage(newMessage, false); for (int i = 0; i < listConnectionSend.Count(); i++) { //Clients.Client(listConnectionSend[i].ConnectionID).messagePrivate(messagePrivate, true); await hubContext.Clients.Client(listConnectionSend[i].ConnectionID).groupMessage(newMessage, true); } //Lấy ra các thành viên trong nhóm var groupUsers = _db.HubUserGroups.Where(p => p.GroupID == groupId && p.UserID != userId).ToList(); foreach (var item in groupUsers) { var onlineUser = CommonStatic.OnlineUsers.FirstOrDefault(p => p.ID == item.UserID); //Nếu user đang online if (onlineUser != null) { // Nếu user đang không tương tác với nhóm var listConnection = _db.Connection.Where(p => p.UserID == item.UserID).ToList(); if (CommonStatic.InteracGroups.FirstOrDefault(p => p.UserID == item.UserID && p.GroupID == groupId) == null) { // Cập nhật lại số tin nhắn chưa đọc for (int i = 0; i < listConnection.Count(); i++) { hubContext.Clients.Client(listConnection[i].ConnectionID).addCountMessageGroup(groupId); } //hubContext.Clients.Client(onlineUser.ConnectionId).addCountMessageGroup(groupId); //Lấy ra 1 NewMessageGroup thoa mãn điều kiện var messGroup = _db.NewMessageGroups.FirstOrDefault(p => p.UserID == item.UserID && p.GroupID == groupId); // Nếu đã tồn tại thì cộng thêm 1 if (messGroup != null) { messGroup.Count += 1; } else { // Chưa tồn tại thì thêm mới _db.NewMessageGroups.Add(new NewMessageGroup { UserID = item.UserID, GroupID = groupId, Count = 1 }); } } } } _db.MessageGroups.Add(newMessage); _db.SaveChanges(); } }
public void addMessagePrivate(string userId, string message) { string id = Context.User.Identity.GetUserId(); string fullname = Context.User.Identity.GetUserFullName(); string avatar = Context.User.Identity.GetUserAvatar(); using (var db = new OZChatDbContext()) { string strDateTime = String.Format("{0:dd/MM/yyyy HH:mm}", DateTime.Now); var messagePrivate = new MessagePrivate() { FromID = id, ReceiveID = userId, Content = message, FromFullName = fullname, FromAvatar = avatar, CreatedDate = DateTime.Now, StrDateTime = strDateTime, IsFile = false }; //Lấy ra user trong list user đang online var onlineUser = CommonStatic.OnlineUsers.FirstOrDefault(p => p.ID == userId); //Nếu user đang online var listConnectionReceive = db.Connection.Where(p => p.UserID == userId).ToList(); var listConnectionSend = db.Connection.Where(p => p.UserID == id).ToList(); if (onlineUser != null) { // Nếu user đang online và đang tương tác với mình if (CommonStatic.Interactives.FirstOrDefault(p => p.FromID == userId && p.ReceiveID == id) != null) { for (int i = 0; i < listConnectionSend.Count(); i++) { Clients.Client(listConnectionSend[i].ConnectionID).messagePrivate(messagePrivate, true); } for (int i = 0; i < listConnectionReceive.Count; i++) { Clients.Client(listConnectionReceive[i].ConnectionID).messagePrivate(messagePrivate, false); } AddUserMessagePrivate(id, userId, false, listConnectionReceive); } // Nếu user đang online nhưng không tương tác với mình. else { for (int i = 0; i < listConnectionSend.Count(); i++) { Clients.Client(listConnectionSend[i].ConnectionID).messagePrivate(messagePrivate, true); } for (int i = 0; i < listConnectionReceive.Count; i++) { Clients.Client(listConnectionReceive[i].ConnectionID).notificationMessage(fullname, message); } List <FcmConnection> listFcmConnection = db.FcmConnection.Where(p => p.UserID == userId).ToList(); for (var i = 0; i < listFcmConnection.Count; i++) { FcmConnection oFcmConnection = listFcmConnection[i]; fcmServer.pushNotificationToUser(oFcmConnection.DeviceToken, fullname, message, id); } AddUserMessagePrivate(id, userId, true, listConnectionReceive); } } // Người mình nhắn tin đang ko online. else { for (int i = 0; i < listConnectionSend.Count(); i++) { Clients.Client(listConnectionSend[i].ConnectionID).messagePrivate(messagePrivate, true); } List <FcmConnection> listFcmConnection = db.FcmConnection.Where(p => p.UserID == userId).ToList(); for (var i = 0; i < listFcmConnection.Count; i++) { FcmConnection oFcmConnection = listFcmConnection[i]; fcmServer.pushNotificationToUser(oFcmConnection.DeviceToken, fullname, message, id); } var user = db.UserMessagePrivates.FirstOrDefault(p => p.FromUserID == id && p.RecieveUserID == userId); if (user == null) { db.UserMessagePrivates.Add(new UserMessagePrivate { FromUserID = id, RecieveUserID = userId, NewMessage = 0 }); } else { user.NewMessage += 1; } } db.MessagePrivates.Add(messagePrivate); db.SaveChanges(); //GetAllMessageUser(userId,listConnectionReceive); } }
private void addMessagePrivate(string userId, string message) { var hubContext = Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext <ChatHub>(); string id = HttpContext.User.Identity.GetUserId(); string fullname = HttpContext.User.Identity.GetUserFullName(); string avatar = HttpContext.User.Identity.GetUserAvatar(); using (var db = new OZChatDbContext()) { string strDateTime = String.Format("{0:dd/MM/yyyy HH:mm}", DateTime.Now); var messagePrivate = new MessagePrivate() { FromID = id, ReceiveID = userId, Content = message, FromFullName = fullname, FromAvatar = avatar, CreatedDate = DateTime.Now, StrDateTime = strDateTime, IsFile = true }; //Lấy ra user trong list user đang online var onlineUser = CommonStatic.OnlineUsers.FirstOrDefault(p => p.ID == userId); var meUser = CommonStatic.OnlineUsers.FirstOrDefault(p => p.ID == id); //Nếu user đang online\ var listConnectionReceive = db.Connection.Where(p => p.UserID == userId).ToList(); var listConnectionSend = db.Connection.Where(p => p.UserID == id).ToList(); if (onlineUser != null) { // Nếu user đang online và đang tương tác với mình if (CommonStatic.Interactives.FirstOrDefault(p => p.FromID == userId && p.ReceiveID == id) != null) { //hubContext.Clients.Client(meUser.ConnectionId).messagePrivate(messagePrivate, true); //hubContext.Clients.Client(onlineUser.ConnectionId).messagePrivate(messagePrivate, false); for (int i = 0; i < listConnectionSend.Count(); i++) { hubContext.Clients.Client(listConnectionSend[i].ConnectionID).messagePrivate(messagePrivate, true); } for (int i = 0; i < listConnectionReceive.Count; i++) { hubContext.Clients.Client(listConnectionReceive[i].ConnectionID).messagePrivate(messagePrivate, false); } AddUserMessagePrivate(id, userId, false, listConnectionReceive); } // Nếu user đang online nhưng không tương tác với mình. else { //hubContext.Clients.Client(meUser.ConnectionId).messagePrivate(messagePrivate, true); //hubContext.Clients.Client(onlineUser.ConnectionId).notificationMessage(fullname, message); for (int i = 0; i < listConnectionSend.Count(); i++) { hubContext.Clients.Client(listConnectionSend[i].ConnectionID).messagePrivate(messagePrivate, true); } for (int i = 0; i < listConnectionReceive.Count; i++) { hubContext.Clients.Client(listConnectionReceive[i].ConnectionID).notificationMessage(fullname, message); } AddUserMessagePrivate(id, userId, true, listConnectionReceive); } } // Người mình nhắn tin đang ko online. else { //hubContext.Clients.Client(meUser.ConnectionId).messagePrivate(messagePrivate, true); for (int i = 0; i < listConnectionSend.Count(); i++) { hubContext.Clients.Client(listConnectionSend[i].ConnectionID).messagePrivate(messagePrivate, true); } var user = db.UserMessagePrivates.FirstOrDefault(p => p.FromUserID == id && p.RecieveUserID == userId); if (user == null) { db.UserMessagePrivates.Add(new UserMessagePrivate { FromUserID = id, RecieveUserID = userId, NewMessage = 0 }); } else { user.NewMessage += 1; } } db.MessagePrivates.Add(messagePrivate); db.SaveChanges(); GetAllMessageUser(); } }
//Thêm tin nhắn vào group public async Task addMessageToGroup(int groupId, string groupName, string message) { var userId = Context.User.Identity.GetUserId(); var username = Context.User.Identity.Name; var fullname = Context.User.Identity.GetUserFullName(); var avatar = Context.User.Identity.GetUserAvatar(); using (var _db = new OZChatDbContext()) { // Tạo mới 1 tin nhắn string strDateTime = String.Format("{0:dd/MM/yyyy HH:mm}", DateTime.Now); var newMessage = new MessageGroup { FromID = userId, GroupID = groupId, FromFullName = fullname, FromAvatar = avatar, Content = message, CreatedDate = DateTime.Now, StrDateTime = strDateTime, IsFile = false }; // Gửi tin nhắn tới nhóm await Clients.OthersInGroup(groupName).groupMessage(newMessage, false); await Clients.Caller.groupMessage(newMessage, true); //Lấy ra các thành viên trong nhóm var groupUsers = _db.HubUserGroups.Where(p => p.GroupID == groupId && p.UserID != userId).ToList(); Boolean saveChange = false; foreach (var item in groupUsers) { var onlineUser = CommonStatic.OnlineUsers.FirstOrDefault(p => p.ID == item.UserID); //Nếu user đang online if (onlineUser != null) { // Nếu user đang không tương tác với nhóm var listConnection = _db.Connection.Where(p => p.UserID == item.UserID).ToList(); if (CommonStatic.InteracGroups.FirstOrDefault(p => p.UserID == item.UserID && p.GroupID == groupId) == null) { //Lấy ra 1 NewMessageGroup thoa mãn điều kiện var messGroup = _db.NewMessageGroups.FirstOrDefault(p => p.UserID == item.UserID && p.GroupID == groupId); // Nếu đã tồn tại thì cộng thêm 1 if (messGroup != null) { messGroup.Count += 1; } else { // Chưa tồn tại thì thêm mới _db.NewMessageGroups.Add(new NewMessageGroup { UserID = item.UserID, GroupID = groupId, Count = 1 }); } saveChange = true; _db.MessageGroups.Add(newMessage); _db.SaveChanges(); // Cập nhật lại số tin nhắn chưa đọc for (int i = 0; i < listConnection.Count(); i++) { Clients.Client(listConnection[i].ConnectionID).addCountMessageGroup(groupId); } } } var oInteracGroup = CommonStatic.InteracGroups.FirstOrDefault(p => p.UserID == item.UserID && p.GroupID == groupId); if (oInteracGroup == null) { try { var listFcmConnection = _db.FcmConnection.Where(p => p.UserID == item.UserID).ToList(); for (var j = 0; j < listFcmConnection.Count; j++) { FcmConnection oFcmConnection = listFcmConnection[j]; fcmServer.pushNotificationToGroup(oFcmConnection.DeviceToken, fullname, message, groupId.ToString()); } } catch (Exception e) { } } } if (saveChange == false) { _db.MessageGroups.Add(newMessage); _db.SaveChanges(); } } }