コード例 #1
0
ファイル: ChatHub.cs プロジェクト: muiten188/oz_Chat
 // 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();
     }
 }
コード例 #2
0
ファイル: HomeController.cs プロジェクト: muiten188/oz_Chat
        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();
                    }
                }
            }
        }
コード例 #3
0
ファイル: ChatHub.cs プロジェクト: muiten188/oz_Chat
        // ------------  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();
        }
コード例 #4
0
ファイル: ChatHub.cs プロジェクト: muiten188/oz_Chat
        // 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();
        }
コード例 #5
0
ファイル: ChatHub.cs プロジェクト: muiten188/oz_Chat
        // 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);
                }
            }
        }
コード例 #6
0
        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));
        }
コード例 #7
0
ファイル: ChatHub.cs プロジェクト: muiten188/oz_Chat
        //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);
                    }
                }
            }
        }
コード例 #8
0
ファイル: HomeController.cs プロジェクト: muiten188/oz_Chat
 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();
             }
         }
     }
 }
コード例 #9
0
ファイル: ChatHub.cs プロジェクト: muiten188/oz_Chat
        //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);
                    }
                }
            }
        }
コード例 #10
0
ファイル: ChatHub.cs プロジェクト: muiten188/oz_Chat
        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();
                }
            }
        }
コード例 #11
0
ファイル: ChatHub.cs プロジェクト: muiten188/oz_Chat
        //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);
                }
            }
        }
コード例 #12
0
ファイル: Configuration.cs プロジェクト: muiten188/oz_Chat
        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();
            }
        }
コード例 #13
0
ファイル: ChatHub.cs プロジェクト: muiten188/oz_Chat
        // -------- 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);
            }
        }
コード例 #14
0
ファイル: ChatHub.cs プロジェクト: muiten188/oz_Chat
        //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();
        }
コード例 #15
0
ファイル: ChatHub.cs プロジェクト: muiten188/oz_Chat
        // 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);
                    }
                }
            }
        }
コード例 #16
0
ファイル: HomeController.cs プロジェクト: muiten188/oz_Chat
        //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();
            }
        }
コード例 #17
0
ファイル: ChatHub.cs プロジェクト: muiten188/oz_Chat
        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);
            }
        }
コード例 #18
0
ファイル: HomeController.cs プロジェクト: muiten188/oz_Chat
        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();
            }
        }
コード例 #19
0
ファイル: ChatHub.cs プロジェクト: muiten188/oz_Chat
        //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();
                }
            }
        }