public override Task OnConnected() { Trace.WriteLine("Here I am " + Context.ConnectionId); Db db = new Db(); UserDTO userDTO = db.Users.Where(x => x.Username.Equals(Context.User.Identity.Name)).FirstOrDefault(); int userId = userDTO.Id; string connId = Context.ConnectionId; if (!db.Online.Any(x => x.Id == userId)) { OnlineDTO online = new OnlineDTO(); online.Id = userId; online.ConnId = connId; db.Online.Add(online); db.SaveChanges(); } List <int> onlineIds = db.Online.ToArray().Select(x => x.Id).ToList(); List <int> friendIds1 = db.Friends.Where(x => x.User1 == userId && x.Active == true).ToArray().Select(x => x.User2).ToList(); List <int> friendIds2 = db.Friends.Where(x => x.User2 == userId && x.Active == true).ToArray().Select(x => x.User1).ToList(); List <int> allFriendsIds = friendIds1.Concat(friendIds2).ToList(); List <int> resultList = onlineIds.Where((i) => allFriendsIds.Contains(i)).ToList(); Dictionary <int, string> dictFriends = new Dictionary <int, string>(); foreach (var id in resultList) { var users = db.Users.Find(id); string friend = users.Username; if (!dictFriends.ContainsKey(id)) { dictFriends.Add(id, friend); } } var transformed = from key in dictFriends.Keys select new { id = key, friend = dictFriends[key] }; string json = JsonConvert.SerializeObject(transformed); var clients = Clients.Caller; clients.getonlinefriends(Context.User.Identity.Name, json); UpdateChat(); // Return return(base.OnConnected()); }
public override Task OnDisconnected(bool stopCalled) { //Log Trace.WriteLine("gone - " + Context.ConnectionId + " " + Context.User.Identity.Name); //Init Db Db db = new Db(); //Get User Id int userId = db.Users.Where(x => x.Username.Equals(Context.User.Identity.Name)).FirstOrDefault().Id; //Remove from Db if (db.Onlines.Any(x => x.Id == userId)) { OnlineDTO online = db.Onlines.Find(userId); db.Onlines.Remove(online); db.SaveChanges(); } //Update Chat UpdateChat(); //return return(base.OnDisconnected(stopCalled)); }
public override Task OnConnected() { //Init Db Db db = new Db(); //GetUser Id var userDTO = db.Users.Where(v => v.UserName.Equals(Context.User.Identity.Name)).FirstOrDefault(); int userId = userDTO.Id; //Get Conn Id string connId = Context.ConnectionId; //Add OnlineDTO if (!db.Online.Any(v => v.Id == userId)) { OnlineDTO onlineDTO = new OnlineDTO(); onlineDTO.Id = userId; onlineDTO.ConnId = connId; db.Online.Add(onlineDTO); db.SaveChanges(); } //Get all Online Ids var onlineIds = db.Online.ToArray().Select(v => v.Id).ToList(); //Get friend Ids List <int> friendIds1 = db.Friends.Where(v => v.User1 == userId && v.Active).Select(t => t.User2).ToList(); List <int> friendIds2 = db.Friends.Where(v => v.User2 == userId && v.Active).Select(t => t.User1).ToList(); List <int> allfriends = friendIds1.Concat(friendIds2).ToList(); //Get final set of Ids List <int> onlinefriends = onlineIds.Where(v => allfriends.Contains(v)).ToList(); //Create dict o friendIds and usernames Dictionary <int, string> dictfriends = new Dictionary <int, string>(); foreach (var id in onlinefriends) { var user = db.Users.Find(id); string friend = user.UserName; if (!dictfriends.ContainsKey(id)) { dictfriends.Add(id, friend); } } var transformed = from key in dictfriends.Keys select new { id = key, friend = dictfriends[key] }; var json = JsonConvert.SerializeObject(transformed); //Set Clients var clients = Clients.Caller; //Call js function clients.getonlinefriends(Context.User.Identity.Name, json); //Update chat UpdateChat(); return(base.OnConnected()); }
public override Task OnDisconnected(bool stopCalled) { Trace.WriteLine("gone - " + Context.ConnectionId + " " + Context.User.Identity.Name); Db db = new Db(); UserDTO userDTO = db.Users.Where(x => x.Username.Equals(Context.User.Identity.Name)).FirstOrDefault(); int userId = userDTO.Id; if (db.Online.Any(x => x.Id == userId)) { OnlineDTO online = db.Online.Find(userId); db.Online.Remove(online); db.SaveChanges(); } UpdateChat(); // Return return(base.OnDisconnected(stopCalled)); }
public override Task OnConnected() { //Log user connection Trace.WriteLine("Here I am " + Context.ConnectionId); //Init Db Db db = new Db(); //Get User Id int userId = db.Users.Where(x => x.Username.Equals(Context.User.Identity.Name)).FirstOrDefault().Id; //Get conn ID string connId = Context.ConnectionId; //Add OnlineDTO if (!db.Onlines.Any(x => x.Id == userId)) { OnlineDTO onlineDTO = new OnlineDTO() { Id = userId, ConnId = connId }; db.Onlines.Add(onlineDTO); db.SaveChanges(); } //Get all online ids List <int> onlineIds = db.Onlines.ToArray().Select(x => x.Id).ToList(); //Get friend Ids List <int> friendIds1 = db.Friends.Where(x => x.User1 == userId && x.IsActive == true) .ToArray().Select(x => x.User2).ToList(); List <int> friendIds2 = db.Friends.Where(x => x.User2 == userId && x.IsActive == true) .ToArray().Select(x => x.User1).ToList(); List <int> allFriendIds = friendIds1.Concat(friendIds2).ToList(); //Get final set of ids - taking only the ids in all onlineIds that exist in allFriendsIds as well List <int> resultList = onlineIds.Where((i) => allFriendIds.Contains(i)).ToList(); //Create a dictionary or ids and usernames Dictionary <int, string> dictFriends = new Dictionary <int, string>(); foreach (var id in resultList) { if (!dictFriends.ContainsKey(id)) { dictFriends.Add(id, db.Users.Where(x => x.Id == id).FirstOrDefault().Username); } } var transformed = from key in dictFriends.Keys select new { id = key, friend = dictFriends[key] }; string json = JsonConvert.SerializeObject(transformed); //Set clients var clients = Clients.Caller; //Call Js function clients.getonlinefriends(Context.User.Identity.Name, json); //Update Chat UpdateChat(); //return return(base.OnConnected()); }
public OnlineVM(OnlineDTO row) { Id = row.Id; ConnId = row.ConnId; }
public override Task OnConnected() { //Log user connection Trace.WriteLine("Here I am - " + Context.ConnectionId); //Initialize the database var db = new Db(); //Get user ID var userDTO = db.Users.FirstOrDefault(x => x.Username.Equals(Context.User.Identity.Name)); var userId = userDTO.Id; //Get the connection ID var connectionId = Context.ConnectionId; //Add to OnlineDTO if (!db.Online.Any(x => x.Id == userId)) { var online = new OnlineDTO(); online.Id = userId; online.ConnectionId = connectionId; db.Online.Add(online); db.SaveChanges(); } //Get all online IDs var onlineIds = db.Online.ToArray().Select(x => x.Id).ToList(); //Get all friend IDs var friendIds1 = db.Friends.Where(x => x.User1 == userId && x.Active == true).ToArray() .Select(x => x.User2).ToList(); var friendIds2 = db.Friends.Where(x => x.User2 == userId && x.Active == true).ToArray() .Select(x => x.User1).ToList(); var allFriendIds = friendIds1.Concat(friendIds2).ToList(); //Get final set of online friend IDs var resultList = onlineIds.Where((i) => allFriendIds.Contains(i)).ToList(); //Create a dictionary of online friend IDs and usernames var dictFriends = new Dictionary <int, string>(); foreach (var id in resultList) { var users = db.Users.Find(id); if (users != null) { var friend = users.Username; if (!dictFriends.ContainsKey(id)) { dictFriends.Add(id, friend); } } } var transformed = from key in dictFriends.Keys select new { id = key, friend = dictFriends[key] }; var json = JsonConvert.SerializeObject(transformed); //Set clients var clients = Clients.Caller; //Call JS function clients.getonlinefriends(Context.User.Identity.Name, json); //Update chat UpdateChat(); //Return return(base.OnConnected()); }