コード例 #1
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();
        }
コード例 #2
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);
                }
            }
        }
コード例 #3
0
        public JsonResult GetRoles(string id)
        {
            using (var db = new OZChatDbContext())
            {
                List <RoleViewModel> Roles = new List <RoleViewModel>();
                var roles    = db.Roles.ToList();
                var user     = db.Users.FirstOrDefault(p => p.Id == id);
                var roleUser = _userManager.GetRoles(id).FirstOrDefault();
                foreach (var item in roles)
                {
                    //var roleUser = db.ApplicationUserRoles.FirstOrDefault(p => p.RoleId == item.Id && p.UserId == id);
                    if (item.Name == roleUser)
                    {
                        Roles.Add(new RoleViewModel {
                            ID = item.Id, Name = item.Name, Checked = true
                        });
                    }
                    else
                    {
                        Roles.Add(new RoleViewModel {
                            ID = item.Id, Name = item.Name, Checked = false
                        });
                    }
                }

                return(Json(new { data = Roles, fullname = user.FullName, email = user.Email }));
            }
        }
コード例 #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
        private async Task GetUserOfGroup(int groupId)
        {
            List <UserGroupViewModel> model = new List <UserGroupViewModel>();

            using (var db = new OZChatDbContext())
            {
                string userId = Context.User.Identity.GetUserId();
                var    users  = db.HubUsers.Select(p => new { p.UserName, p.FullName, p.ID }).ToList();

                var userGroups = db.HubUserGroups.Where(p => p.GroupID == groupId);

                foreach (var item in users)
                {
                    var userGroup = userGroups.FirstOrDefault(p => p.UserID == item.ID);
                    if (userGroup == null)
                    {
                        model.Add(new UserGroupViewModel {
                            UserName = item.UserName, FullName = item.FullName, UserID = item.ID, IsChecked = false
                        });
                    }
                    else
                    {
                        model.Add(new UserGroupViewModel {
                            UserName = item.UserName, FullName = item.FullName, UserID = item.ID, IsChecked = true
                        });
                    }
                }
            }
            await Clients.Caller.listUserInGroup(model.OrderByDescending(p => p.IsChecked == true).ToList());
        }
コード例 #6
0
ファイル: Configuration.cs プロジェクト: muiten188/oz_Chat
        private void CreateUser(OZChatDbContext context)
        {
            var manager = new UserManager <ApplicationUser>(new UserStore <ApplicationUser>(new OZChatDbContext()));

            var roleManager = new RoleManager <IdentityRole>(new RoleStore <IdentityRole>(new OZChatDbContext()));
            var user        = new ApplicationUser {
                UserName = "******", Email = "*****@*****.**", FullName = "OZ Corp", Avartar = "/Content/plugins/dist/img/avatar5.png"
            };

            if (manager.Users.Count(x => x.UserName == "oz123@gmail") == 0)
            {
                manager.Create(user, "123456");

                if (!roleManager.Roles.Any())
                {
                    roleManager.Create(new IdentityRole {
                        Name = "Admin"
                    });
                    roleManager.Create(new IdentityRole {
                        Name = "Mod"
                    });
                    roleManager.Create(new IdentityRole {
                        Name = "User"
                    });
                }

                var adminUser = manager.FindByEmail("*****@*****.**");

                manager.AddToRoles(adminUser.Id, new string[] { "Admin" });
            }
        }
コード例 #7
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();
     }
 }
コード例 #8
0
        public override Task GrantRefreshToken(OAuthGrantRefreshTokenContext context)
        {
            // Change authentication ticket for refresh token requests
            var newIdentity = new ClaimsIdentity(context.Ticket.Identity);

            newIdentity.AddClaim(new Claim("newClaim", "newValue"));
            HubUser user;

            try
            {
                if (!string.IsNullOrEmpty(context.Ticket.Properties.Dictionary["username"]))
                {
                    string userName = Convert.ToString(context.Ticket.Properties.Dictionary["username"]);
                    using (var db = new OZChatDbContext())
                    {
                        user = db.HubUsers.Where(p => p.UserName == userName).FirstOrDefault();
                        if (user != null)
                        {
                            //newIdentity.AddClaim(new Claim("avartar", "bach"));
                            context.Ticket.Properties.Dictionary["avartar"]  = user.Avatar;
                            context.Ticket.Properties.Dictionary["fullName"] = user.FullName;
                        }
                    }
                }
            }
            catch (Exception e)
            {
            }

            var newTicket = new AuthenticationTicket(newIdentity, context.Ticket.Properties);

            context.Validated(newTicket);

            return(Task.FromResult <object>(null));
        }
コード例 #9
0
 public AccountController(ApplicationUserManager userManager,
                          ApplicationSignInManager signInManager,
                          IAuthenticationManager authManager)
 {
     _userManager   = userManager;
     _signInManager = signInManager;
     _authManager   = authManager;
     _dbContext     = new OZChatDbContext();
 }
コード例 #10
0
ファイル: HomeController.cs プロジェクト: muiten188/oz_Chat
        private void GetAllMessageUser()
        {
            var    hubContext = Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext <ChatHub>();
            int    count      = 0;
            string id         = HttpContext.User.Identity.GetUserId();
            List <HubUserViewModel> listHubUser        = new List <HubUserViewModel>();
            List <Connection>       listConnectionSend = new List <Connection>();

            using (var db = new OZChatDbContext())
            {
                var recieveUsers = db.UserMessagePrivates.Where(p => p.RecieveUserID == id);
                listConnectionSend = db.Connection.Where(p => p.UserID == id).ToList();
                foreach (var item in recieveUsers)
                {
                    var user = db.HubUsers.FirstOrDefault(p => p.ID == item.FromUserID);
                    listHubUser.Add(new HubUserViewModel
                    {
                        ID        = user.ID,
                        Email     = user.Email,
                        UserName  = user.UserName,
                        FullName  = user.FullName,
                        Avatar    = user.Avatar,
                        Connected = user.Connected,
                        CountNew  = item.NewMessage
                    });
                    count += item.NewMessage;
                }
                var fromUsers = db.UserMessagePrivates.Where(p => p.FromUserID == id);
                foreach (var item in fromUsers)
                {
                    var user = db.HubUsers.FirstOrDefault(p => p.ID == item.RecieveUserID);
                    if (user != null && listHubUser.FirstOrDefault(p => p.ID == user.ID) == null)
                    {
                        listHubUser.Add(new HubUserViewModel
                        {
                            ID        = user.ID,
                            Email     = user.Email,
                            UserName  = user.UserName,
                            FullName  = user.FullName,
                            Avatar    = user.Avatar,
                            Connected = user.Connected,
                            CountNew  = 0
                        });
                    }
                }
            }
            var meUser = CommonStatic.OnlineUsers.FirstOrDefault(p => p.ID == id);

            for (int i = 0; i < listConnectionSend.Count(); i++)
            {
                //Clients.Client(listConnectionSend[i].ConnectionID).messagePrivate(messagePrivate, true);
                hubContext.Clients.Client(listConnectionSend[i].ConnectionID).allMessageUser(listHubUser, count);
            }
        }
コード例 #11
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();
                    }
                }
            }
        }
コード例 #12
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);
                    }
                }
            }
        }
コード例 #13
0
ファイル: ChatHub.cs プロジェクト: muiten188/oz_Chat
 ////Hàm lấy danh sách các user đã từng chat với bạn
 public void GetAllMessageUser()
 {
     try
     {
         int    count = 0;
         string id    = Context.User.Identity.GetUserId();
         List <HubUserViewModel> listHubUser = new List <HubUserViewModel>();
         using (var db = new OZChatDbContext())
         {
             var recieveUsers = db.UserMessagePrivates.Where(p => p.RecieveUserID == id);
             foreach (var item in recieveUsers)
             {
                 var user = db.HubUsers.FirstOrDefault(p => p.ID == item.FromUserID);
                 listHubUser.Add(new HubUserViewModel
                 {
                     ID        = user.ID,
                     Email     = user.Email,
                     UserName  = user.UserName,
                     FullName  = user.FullName,
                     Avatar    = user.Avatar,
                     Connected = user.Connected,
                     CountNew  = item.NewMessage
                 });
                 count += item.NewMessage;
             }
             var fromUsers = db.UserMessagePrivates.Where(p => p.FromUserID == id);
             foreach (var item in fromUsers)
             {
                 var user = db.HubUsers.FirstOrDefault(p => p.ID == item.RecieveUserID);
                 if (user != null && listHubUser.FirstOrDefault(p => p.ID == user.ID) == null)
                 {
                     listHubUser.Add(new HubUserViewModel
                     {
                         ID        = user.ID,
                         Email     = user.Email,
                         UserName  = user.UserName,
                         FullName  = user.FullName,
                         Avatar    = user.Avatar,
                         Connected = user.Connected,
                         CountNew  = 0
                     });
                 }
             }
         }
         Clients.Caller.allMessageUser(listHubUser, count);
     }
     catch (Exception e)
     {
         throw;
     }
 }
コード例 #14
0
ファイル: ChatHub.cs プロジェクト: muiten188/oz_Chat
        // Hàm lấy ra toàn bộ nhóm mà user là thành viên
        private void GetAllGroup()
        {
            int totalMessage = 0;

            using (var db = new OZChatDbContext())
            {
                List <Object> listJoinGroupUser = new List <object>();
                string        userId            = Context.User.Identity.GetUserId();
                var           joinGroupUser     = (from hug in db.HubUserGroups
                                                   join gr in db.Groups
                                                   on hug.GroupID equals gr.ID
                                                   into ps1
                                                   from o1 in ps1.DefaultIfEmpty()

                                                   join nm in db.NewMessageGroups
                                                   on hug.GroupID equals nm.GroupID
                                                   into ps2
                                                   from o2 in ps2.DefaultIfEmpty()

                                                   join mes in db.MessageGroups
                                                   on(
                                                       from mes1
                                                       in db.MessageGroups
                                                       where mes1.GroupID == hug.GroupID
                                                       orderby mes1.CreatedDate descending
                                                       select mes1.ID
                                                       ).FirstOrDefault() equals mes.ID
                                                   into ps
                                                   from o in ps.DefaultIfEmpty()
                                                   where hug.UserID == userId
                                                   orderby o.CreatedDate descending
                                                   select new
                {
                    ID = hug.GroupID,
                    Name = o1.Name,
                    Content = o.Content,
                    Count = o2.Count == null? 0 : o2.Count,
                    CreatedDate = o.CreatedDate == null ? (DateTime?)null : o.CreatedDate
                }).ToList();
                if (joinGroupUser != null)
                {
                    //List<GroupViewModel> groups = new List<GroupViewModel>();
                    for (int i = 0; i < joinGroupUser.Count; i++)
                    {
                        var item = joinGroupUser[i];
                        totalMessage += item.Count;
                    }
                    Clients.Caller.allGroup(joinGroupUser, totalMessage);
                }
            }
        }
コード例 #15
0
ファイル: HomeController.cs プロジェクト: muiten188/oz_Chat
        public void GetAllMessageUser(string receivedID, List <Connection> listConnection)
        {
            int    count      = 0;
            var    hubContext = Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext <ChatHub>();
            string id         = HttpContext.User.Identity.GetUserId();
            List <HubUserViewModel> listHubUser = new List <HubUserViewModel>();

            using (var db = new OZChatDbContext())
            {
                var recieveUsers = db.UserMessagePrivates.Where(p => p.RecieveUserID == receivedID);
                foreach (var item in recieveUsers)
                {
                    var user = db.HubUsers.FirstOrDefault(p => p.ID == item.FromUserID);
                    listHubUser.Add(new HubUserViewModel
                    {
                        ID        = user.ID,
                        Email     = user.Email,
                        UserName  = user.UserName,
                        FullName  = user.FullName,
                        Avatar    = user.Avatar,
                        Connected = user.Connected,
                        CountNew  = item.NewMessage + 1
                    });

                    count += item.NewMessage + 1;
                }
                //var fromUsers = db.UserMessagePrivates.Where(p => p.FromUserID == id);
                //foreach (var item in fromUsers)
                //{
                //    var user = db.HubUsers.FirstOrDefault(p => p.ID == item.FromUserID);
                //    if (listHubUser.FirstOrDefault(p => p.ID == user.ID) == null)
                //    {
                //        listHubUser.Add(new HubUserViewModel
                //        {
                //            ID = user.ID,
                //            Email = user.Email,
                //            UserName = user.UserName,
                //            FullName = user.FullName,
                //            Avatar = user.Avatar,
                //            Connected = user.Connected,
                //            CountNew = 0
                //        });
                //    }
                //}
            }
            for (var i = 0; i < listConnection.Count(); i++)
            {
                hubContext.Clients.Client(listConnection[i].ConnectionID).allMessageUser(listHubUser, count);
            }
        }
コード例 #16
0
ファイル: ChatHub.cs プロジェクト: muiten188/oz_Chat
        public Task LeaveRoom()
        {
            string userId = Context.User.Identity.GetUserId();

            using (var db = new OZChatDbContext())
            {
                var groupUsers = db.HubUserGroups.Include(p => p.Group).Where(p => p.UserID != userId).ToList();
                foreach (var item in groupUsers)
                {
                    string roomName = item.Group.Name;
                    Groups.Remove(Context.ConnectionId, roomName);
                }
            }
            return(null);
        }
コード例 #17
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();
             }
         }
     }
 }
コード例 #18
0
ファイル: HomeController.cs プロジェクト: muiten188/oz_Chat
        //Hàm lấy danh sách các user đã từng chat với bạn
        private void GetAllMessageUser(string connectId)
        {
            var    hubContext = Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext <ChatHub>();
            int    count      = 0;
            string id         = HttpContext.User.Identity.GetUserId();
            List <HubUserViewModel> listHubUser = new List <HubUserViewModel>();

            using (var db = new OZChatDbContext())
            {
                var recieveUsers = db.UserMessagePrivates.Where(p => p.RecieveUserID == id);
                foreach (var item in recieveUsers)
                {
                    var user = db.HubUsers.FirstOrDefault(p => p.ID == item.RecieveUserID);
                    listHubUser.Add(new HubUserViewModel
                    {
                        ID        = user.ID,
                        Email     = user.Email,
                        UserName  = user.UserName,
                        FullName  = user.FullName,
                        Avatar    = user.Avatar,
                        Connected = user.Connected,
                        CountNew  = item.NewMessage
                    });

                    count += item.NewMessage;
                }
                var fromUsers = db.UserMessagePrivates.Where(p => p.FromUserID == id);
                foreach (var item in fromUsers)
                {
                    var user = db.HubUsers.FirstOrDefault(p => p.ID == item.FromUserID);
                    if (listHubUser.FirstOrDefault(p => p.ID == user.ID) == null)
                    {
                        listHubUser.Add(new HubUserViewModel
                        {
                            ID        = user.ID,
                            Email     = user.Email,
                            UserName  = user.UserName,
                            FullName  = user.FullName,
                            Avatar    = user.Avatar,
                            Connected = user.Connected,
                            CountNew  = 0
                        });
                    }
                }
            }
            hubContext.Clients.Client(connectId).allMessageUser(listHubUser, count);
        }
コード例 #19
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);
                    }
                }
            }
        }
コード例 #20
0
ファイル: ChatHub.cs プロジェクト: muiten188/oz_Chat
        private async Task GetUserOutGroup()
        {
            List <UserGroupViewModel> model = new List <UserGroupViewModel>();

            using (var db = new OZChatDbContext())
            {
                string userId = Context.User.Identity.GetUserId();
                var    users  = db.HubUsers.Select(p => new { p.UserName, p.FullName, p.ID })
                                .Where(p => p.ID != userId).ToList();

                foreach (var item in users)
                {
                    model.Add(new UserGroupViewModel {
                        UserName = item.UserName, FullName = item.FullName, UserID = item.ID, IsChecked = false
                    });
                }
            }
            await Clients.Caller.getAllUserForGroup(model);
        }
コード例 #21
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);
                }
            }
        }
コード例 #22
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();
                }
            }
        }
コード例 #23
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();
            }
        }
コード例 #24
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);
            }
        }
コード例 #25
0
ファイル: ChatHub.cs プロジェクト: muiten188/oz_Chat
        //// Hàm load toàn bộ user
        public void GetAllUser()
        {
            string id = Context.User.Identity.GetUserId();

            using (var db = new OZChatDbContext())
            {
                var user1 = (from hub in db.HubUsers
                             join mes in db.MessagePrivates
                             on(
                                 from mes1
                                 in db.MessagePrivates
                                 where mes1.FromID == hub.ID || mes1.ReceiveID == hub.ID
                                 orderby mes1.CreatedDate descending
                                 select mes1.ID
                                 ).FirstOrDefault() equals mes.ID
                             into ps
                             from o in ps.DefaultIfEmpty()
                             where hub.ID != id

                             orderby o.CreatedDate descending
                             select new
                {
                    ID = hub.ID,
                    Email = hub.Email,
                    UserName = hub.UserName,
                    FullName = hub.FullName,
                    Avatar = hub.Avatar,
                    Connected = hub.Connected,
                    MessagePrivates = hub.MessagePrivates,
                    Content = o.Content,
                    FromID = o.FromID,
                    ReceiveID = o.ReceiveID,
                    CreatedDate = o.CreatedDate == null? (DateTime?)null : o.CreatedDate
                }).ToList();

                //var users = db.HubUsers.Where(p => p.ID != id).ToList();
                Clients.Caller.alluser(user1);
            }
        }
コード例 #26
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();
        }
コード例 #27
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);
                    }
                }
            }
        }
コード例 #28
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();
            }
        }
コード例 #29
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();
                }
            }
        }
コード例 #30
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();
            }
        }