/// <summary> /// 获取当前用户. /// </summary> /// <returns></returns> private ChatRoomUser GetCurrentChatRoomUser() { var webUser = Context.User; ChatRoomUser user = null; if (!webUser.Identity.IsAuthenticated) { // 未登录用户, 使用默认值. user = GetNewRandomUser(); } else { // 已登录用户. user = this.chatRoomUserService.GetChatRoomUserByName(webUser.Identity.Name); if (user == null) { logger.WarnFormat("尝试重新加载用户 {0} 的数据,结果加载失败!", webUser.Identity.Name); user = GetNewRandomUser(); } } return(user); }
/// <summary> /// 管理员进入房间. /// </summary> /// <param name="roomCode"></param> public void AdminInRoom(string roomCode) { InRoom(roomCode); // 查询用户。 OnlineUser user = UserList.SingleOrDefault(u => u.ContextID == Context.ConnectionId); // 非游客的情况下, 判断是不是管理员. if (user.UserID == 1) { // 可能发生异常. logger.WarnFormat("一个游客 {0}, 尝试以管理员的方式,进入房间 {1}", Context.ConnectionId, roomCode); return; } ChatRoomUser chatRoomUser = GetCurrentChatRoomUser(); if (!chatRoomUser.IsAdmin) { // 可能发生错误. logger.WarnFormat("一个普通用户 {0}, 尝试以管理员的方式,进入房间 {1}", chatRoomUser.UserName, roomCode); Clients.Client(Context.ConnectionId).showErrorMessage("您没有管理员的权限!"); return; } // 是管理员, 加入 “管理员组” Groups.Add(Context.ConnectionId, GetAdminGroupCode(roomCode)); }
public ActionResult Create(ChatRoomUser model) { //MVC uses ModelState to track the correctness of the supplied Person "model." //If the model is valid, it means that MVC didn't detect any errors as defined //in the attributes in the Person class. if (ModelState.IsValid) { /*if(CurrentPicUrl != "") * { * model.PicUrl = CurrentPicUrl; * CurrentPicUrl = ""; * }*/ //Add the person to the DB. This queues them for insertion but doesn't //actually insert the value into the DB. For that, we need the next command. //model.setRandomPic(); Db.users.Add(model); //tell the DB to save any queued changes. Db.SaveChanges(); //Once we're done, redirect to the Index action of HomeController. return(RedirectToAction("Login")); } else { ModelState.AddModelError("", "One or more issues were found with your submission. Please try again."); } //If we got here, it means that the model's state is invalid. Simply return //to the create page and display any errors. return(View("Login", model)); }
public Task Connect() { UserAccount ua = new UserAccount(Context.User.Identity.Name); ChatRoomUser cru = new ChatRoomUser(); cru.GetChatRoomUserByUserAccountID(ua.UserAccountID); if (cru.ChatRoomUserID == 0) { cru.CreatedByUserID = ua.UserAccountID; cru.ConnectionCode = Context.ConnectionId; cru.Create(); } else { cru.ConnectionCode = Context.ConnectionId; cru.UpdatedByUserID = ua.UserAccountID; cru.Update(); } Send(@"<i style=""color:yellow;font-size:10px;font-style: italic;"">CONNECTION OPENED</i>", ua.UserAccountID); return Clients.joined(Context.ConnectionId, DateTime.UtcNow.ToString()); }
public ActionResult LoadEarlierMessages(int roomId) { int userid = (int)Session["userid"]; ChatRoomUser user = Db.users.Where(m => m.Id == userid).FirstOrDefault(); DateTime hourAgo = user.messageLimit.Subtract(new TimeSpan(1, 0, 0)); user.messageLimit = hourAgo; Db.currentRoom = Db.chatRooms.Where(m => m.id == roomId).FirstOrDefault(); int max = Db.currentRoom.maxMessages; if (Db.currentRoom == null) { Db.currentRoom = Db.chatRooms.Where(m => m.isCurrent == true).FirstOrDefault(); } foreach (ChatMessage ms in Db.messages) { if (ms.RoomId == Db.currentRoom.id) { if (ms.MessageDate > hourAgo) { max++; } } } Db.currentRoom.maxMessages = Math.Max(Db.currentRoom.maxMessages, max); //Db.Entry(user).State = System.Data.Entity.EntityState.Modified; //Db.SaveChanges(); return(RedirectToAction("ChatIndex", new { numMsg = Db.currentRoom.maxMessages })); }
/// <summary> /// 取得用户. /// </summary> /// <param name="userName"></param> /// <returns></returns> public ChatRoomUser GetChatRoomUserByName(string userName) { using (MyChatRoomContext context = new MyChatRoomContext()) { // 检查 用户. ChatRoomUser user = context.ChatRoomUsers.Include("UserLevel").FirstOrDefault(p => p.UserName == userName); // 返回. return(user); } }
/// <summary> /// 创建或更新用户 /// </summary> /// <param name="userData"></param> /// <param name="resultMsg"></param> /// <returns></returns> public bool InsertOrUpdateChatRoomUser(ChatRoomUser userData, ref string resultMsg) { try { using (MyChatRoomContext context = new MyChatRoomContext()) { // 先判断本次操作, 是插入, 还是更新. ChatRoomUser dbUserData = context.ChatRoomUsers.Find(userData.UserID); if (dbUserData == null) { // 插入. context.ChatRoomUsers.Add(userData); } else { // 更新. // 昵称. dbUserData.UserNickName = userData.UserNickName; // 等级. dbUserData.UserLevelCode = userData.UserLevelCode; // 头像. dbUserData.UserPhoto = userData.UserPhoto; } context.SaveChanges(); } return(true); } catch (System.Data.Entity.Validation.DbEntityValidationException dbErr) { foreach (var errItem in dbErr.EntityValidationErrors) { foreach (var err in errItem.ValidationErrors) { logger.InfoFormat("{0} : {1}", err.PropertyName, err.ErrorMessage); } } logger.Error(dbErr.Message, dbErr); resultMsg = dbErr.Message; return(false); } catch (Exception ex) { logger.Error(ex.Message, ex); resultMsg = ex.Message; return(false); } }
public ActionResult DeleteAccount(int id) { ChatRoomUser p = Db.users.Where(c => c.Id == id).FirstOrDefault(); if (p != null) { Db.Entry(p).State = System.Data.Entity.EntityState.Deleted; Db.SaveChanges(); } return(RedirectToAction("Login")); }
/// <summary> /// 取得用户. /// </summary> /// <param name="userName"></param> /// <returns></returns> public ChatRoomUser GetChatRoomUser(long userID) { using (MyChatRoomContext context = new MyChatRoomContext()) { // 检查 用户. ChatRoomUser user = context.ChatRoomUsers.Find(userID); // 返回. return(user); } }
/// <summary> /// 创建一个随机用户. /// </summary> /// <returns></returns> private ChatRoomUser GetNewRandomUser() { ChatRoomUser user = new ChatRoomUser() { UserID = 1, UserName = "******", UserNickName = GetRandomGuestCode(), IsAdmin = false, }; return(user); }
public IActionResult GetGUID(ChatRoomUser user) { var db = new DataContext(); var guid = from ug in db.ChatRoomUser where ug.Account == user.Account select ug.GUID; var userGUID = new Dictionary <string, string>(); userGUID.Add("GUID", guid.First().Trim()); return(Ok(userGUID)); }
public IActionResult GetUserFriends(ChatRoomUser user) { var db = new DataContext(); var usersFriends = from uf in db.UsersRelationship //获取该用户好友列表 where user.Account == uf.UserAccount //select uf.FriendAccount; join cru in db.ChatRoomUser on uf.FriendAccount equals cru.Account select new { friendName = cru.UserName.Trim(), friendAccount = cru.Account.Trim(), friendProfile = cru.ProfilePicture.Trim() }; return(Ok(usersFriends)); }
public Task Disconnect() { ChatRoomUser cru = new ChatRoomUser(); cru.GetChatRoomUserByConnection(Context.ConnectionId); UserAccount ua = new UserAccount(cru.CreatedByUserID); cru.DeleteChatRoomUser(); Send(@"<i style=""color:red;font-size:10px;font-style: italic;"">CONNECTION CLOSED</i>", ua.UserAccountID); return Clients.leave(Context.ConnectionId, DateTime.UtcNow.ToString()); }
public ActionResult Login(ChatRoomUser model) { int uId = 0; bool found = false; Session["userid"] = null; Session["canwrite"] = false; Session["isadmin"] = false; foreach (ChatRoomUser p in Db.users) { if (model.Email == p.Email && model.Password == p.Password) { uId = p.Id; Session["userid"] = p.Id; Session["name"] = p.FirstName + " " + p.LastName; Session["login"] = true; Session["ScrollHeight"] = 0; if (p.Email == "*****@*****.**") { Session["isadmin"] = true; } Db.currentUser = p; found = true; //break; foreach (ChatRoom cr in Db.chatRooms) { cr.isCurrent = false; Db.Entry(cr).State = System.Data.Entity.EntityState.Modified; } Db.SaveChanges(); } } if (!found) { foreach (string key in ModelState.Keys) { ModelState[key].Errors.Clear(); } ModelState.AddModelError("", "Invalid User Name / Password"); return(View("Login")); } Db.SaveChanges(); //return RedirectToAction("Login"); //return View("MyBlogs", new { model = db.CurrentBlogger }); return(RedirectToAction("ChatIndex", "ChatRoom")); }
public IActionResult GetUserName(ChatRoomUser user) { var userInfo = new Dictionary <string, string>(); var db = new DataContext(); var userNames = from u in db.ChatRoomUser where user.Account == u.Account select new { userName = u.UserName, userProfile = u.ProfilePicture }; string userName = userNames.First().userName.Trim(); string userProfile = userNames.First().userProfile.Trim(); userInfo.Add("UserName", userName); userInfo.Add("UserProfile", userProfile); return(Ok(userInfo)); }
public ActionResult Logout() { Session["isadmin"] = false; Session["login"] = false; int uid = (int)Session["userid"]; ChatRoomUser user = Db.users.Where(c => c.Id == uid).FirstOrDefault(); ChatRoom oldRoom = Db.chatRooms.Where(c => c.isCurrent == true).FirstOrDefault(); if (user != null) { user.Room = null; user.rid = -1; if (oldRoom != null) { ChatMessage leaveMsg = new ChatMessage(); leaveMsg.Author = user; leaveMsg.AuthorId = user.Id; leaveMsg.AuthorName = user.FirstName + " " + user.LastName; leaveMsg.MessageDate = DateTime.Now; leaveMsg.Room = oldRoom; leaveMsg.RoomId = oldRoom.id; leaveMsg.Message = user.FirstName + " " + user.LastName + "Has Left The Room."; Db.messages.Add(leaveMsg); } if (Db.currentRoom != null) { Db.currentRoom.Users.Remove(user); Db.Entry(Db.currentRoom).State = System.Data.Entity.EntityState.Modified; } foreach (ChatRoom cr in Db.chatRooms) { if (cr.Users.Contains(user)) { cr.Users.Remove(user); Db.Entry(cr).State = System.Data.Entity.EntityState.Modified; } } Db.Entry(user).State = System.Data.Entity.EntityState.Modified; Db.SaveChanges(); } Db.currentRoom = null; return(RedirectToAction("Login")); }
public async Task <IActionResult> OnPostAsync(string returnUrl = null) { returnUrl = returnUrl ?? Url.Content("~/"); ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); if (ModelState.IsValid) { var user = new ChatRoomUser { UserName = Input.Email, Email = Input.Email, DisplayName = Input.DisplayName }; var result = await _userManager.CreateAsync(user, Input.Password); if (result.Succeeded) { _logger.LogInformation("User created a new account with password."); var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code)); var callbackUrl = Url.Page( "/Account/ConfirmEmail", pageHandler: null, values: new { area = "Identity", userId = user.Id, code = code }, protocol: Request.Scheme); await _emailSender.SendEmailAsync(Input.Email, "Confirm your email", $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>."); if (_userManager.Options.SignIn.RequireConfirmedAccount) { return(RedirectToPage("RegisterConfirmation", new { email = Input.Email })); } else { await _signInManager.SignInAsync(user, isPersistent : false); return(LocalRedirect(returnUrl)); } } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } // If we got this far, something failed, redisplay form return(Page()); }
public ActionResult JoinRoom(int id = -1) { int userId = (int)Session["userid"]; ChatRoomUser user = Db.users.Where(m => m.Id == userId).FirstOrDefault(); ChatRoom newRoom = Db.chatRooms.Where(c => c.id == id).FirstOrDefault(); ChatRoom oldRoom = Db.chatRooms.Where(c => c.isCurrent == true).FirstOrDefault(); if (oldRoom != null) { //RedirectToAction("SendMessage", new { msg = user.FirstName + " " + user.LastName + " Has Left The Room" }); ChatMessage leaveMsg = new ChatMessage(); leaveMsg.Author = user; leaveMsg.AuthorId = user.Id; leaveMsg.AuthorName = user.FirstName + " " + user.LastName; leaveMsg.MessageDate = DateTime.Now; leaveMsg.Room = oldRoom; leaveMsg.RoomId = oldRoom.id; leaveMsg.Message = user.FirstName + " " + user.LastName + " Has Left The Room."; Db.messages.Add(leaveMsg); oldRoom.isCurrent = false; Db.Entry(oldRoom).State = System.Data.Entity.EntityState.Modified; Db.SaveChanges(); } if (newRoom != null) { if (user != null) { user.rid = newRoom.id; Db.Entry(user).State = System.Data.Entity.EntityState.Modified; } if (Db.currentRoom != null) { Db.currentRoom.isCurrent = false; } newRoom.isCurrent = true; Db.currentRoom = newRoom; Db.currentRoom.Users.Add(user); Db.SaveChanges(); } return(RedirectToAction("SendMessage", new { msg = user.FirstName + " " + user.LastName + " Has Joined The Room" })); //return RedirectToAction("ChatIndex"); }
public ActionResult SendMessage(string msg) { ChatMessage newMsg = new ChatMessage(); newMsg.Message = msg; newMsg.MessageDate = DateTime.Now; if (Db.currentRoom == null) { Db.currentRoom = Db.chatRooms.Where(c => c.isCurrent == true).FirstOrDefault(); if (Db.currentRoom == null) { Db.currentRoom = Db.chatRooms.FirstOrDefault(); } } if (Db.currentRoom != null) { newMsg.Room = Db.currentRoom; newMsg.RoomId = Db.currentRoom.id; Db.currentRoom.isCurrent = true; } if (Session["userid"] != null) { newMsg.AuthorId = (int)Session["userid"]; } ChatRoomUser author = Db.users.Where(u => u.Id == newMsg.AuthorId).FirstOrDefault(); if (author != null) { author.LastActivity = DateTime.Now; newMsg.Author = author; newMsg.AuthorName = author.FirstName + " " + author.LastName; } //Db.currentRoom.messages.Add(newMsg); //Db.Entry(Db.currentRoom).State = System.Data.Entity.EntityState.Modified; Db.messages.Add(newMsg); Db.SaveChanges(); return(RedirectToAction("ChatIndex")); //return View("ChatIndex", Db); }
public IActionResult Login(ChatRoomUser user) { Dictionary <string, bool> dMsg = new Dictionary <string, bool>(); var db = new DataContext(); bool exits = db.ChatRoomUser.Any(u => u.Account.Trim() == user.Account.Trim() && u.Password.Trim() == user.Password.Trim()); //账号密码验证 if (exits) //登陆成功 { dMsg.Add("Success", true); return(Ok(dMsg)); } else //登陆失败 { dMsg.Add("Success", false); return(Ok(dMsg)); } }
public IActionResult GetOnlineFriends(ChatRoomUser user) { RedisHelper redis = new RedisHelper(connetion); var db = new DataContext(); List <string> onlineFriends = new List <string>(); var friendsAccount = from ur in db.UsersRelationship //获取该用户所有的好友(包括在线和不在线的) where ur.UserAccount == user.Account select ur.FriendAccount; foreach (var f in friendsAccount) { if (redis.GetValue(f) != null) { onlineFriends.Add(f); } } return(Ok(onlineFriends)); }
public bool Login(string userName, string password, ref string resultMsg) { // 用户名, 去空格,小写. userName = userName.Trim().ToLower(); using (MyChatRoomContext context = new MyChatRoomContext()) { // 检查 用户. ChatRoomUser user = context.ChatRoomUsers.FirstOrDefault(p => p.UserName == userName); if (user == null) { if (logger.IsInfoEnabled) { logger.InfoFormat("用户 {0} 不存在!", userName); } resultMsg = "用户名或密码不正确?"; // 用户不存在. return(false); } string key = String.Format(KeyWord, userName, password); string pass = SHA512Process.GetSHA512String(key); if (user.UserPassword != pass) { if (logger.IsInfoEnabled) { logger.InfoFormat("用户 {0} 登录,密码 {1} 输入错误!", userName, password); } resultMsg = "用户名或密码不正确!"; // 密码错误. return(false); } return(true); } }
public ActionResult Index(int id = -1) { if (id == -1) { //find the default chat room id id = Db.ChatRooms.Where(r => r.SchoolId == CurrentUser.SchoolId) .Where(r => r.IsDefaultRoom == true) .FirstOrDefault() .Id; } //remove the user from all other rooms by setting last active date to a long time ago List <ChatRoomUser> records = Db.ChatRoomUsers.Where(u => u.UserId == CurrentUser.Id).Where(u => u.RoomId != id).ToList(); foreach (ChatRoomUser record in records) { record.LastActivity = DateTime.UtcNow.AddDays(-1); } //Add a chat message indicating that the user has entered the room ChatRoomUser userRecord = Db.ChatRoomUsers.Where(u => u.UserId == CurrentUser.Id).Where(u => u.RoomId == id).FirstOrDefault(); if (userRecord != null) { if (userRecord.LastActivity < DateTime.UtcNow.Subtract(CHAT_TIMEOUT)) { ChatMessage message = new ChatMessage() { AuthorId = CurrentUser.Id, Message = string.Format("{0} has entered the chat room.", CurrentUser.FirstName), MessageDate = DateTime.UtcNow, RoomId = id }; Db.ChatMessages.Add(message); } } Db.SaveChanges(); ChatRoomViewModel vm = BuildViewModel(id); return(View(vm)); }
public ActionResult Edit(ChatRoomUser model) { //again, check modelstate to make sure everything went okay if (ModelState.IsValid) { //Because the item already exists in the DB, we want to tell EF that //one of its models has been changed. We use this somewhat strange syntax to //accomplish this task. Db.Entry(model).State = System.Data.Entity.EntityState.Modified; //Again, the above command adds the request to a queue. To execute the queue, //we need to call SaveChanges() Db.SaveChanges(); //when complete, redirect to Index return(RedirectToAction("Index")); } //Things must've went bad, so send back to the Create view. return(View("Create", model)); }
public ActionResult Edit(int id = -1) { if (id < 0) { id = (int)Session["userid"]; } //Find the person in the DB. Use the supplied "id" integer as a reference. ChatRoomUser somePerson = Db.users .Where(p => p.Id == id) //this line says to find the person whose ID matches our parameter .FirstOrDefault(); //FirstOrDefault() returns either a singluar Person object or NULL //If we got NULL, it must mean that we were supplied an incorrect ID. //In this case, redirect to HomeController's Index action. if (somePerson == null) { return(RedirectToAction("Index")); } //If we're here, then we must have a valid person. Send to the "Create" view because //create and edit are kind of the same thing. The 2nd parameter is the model that //we will be sending to the Create view. return(View("Create", somePerson)); }
public void Connect(string userName) { MembershipUser mu = MembershipWrapper.GetUser(); string id = Context.ConnectionId; if (ConnectedUsers.Count(x => x.ConnectionId == id) != 0) return; ConnectedUsers.Add(new UserDetail {ConnectionId = id, UserName = userName}); if (mu != null) { var enterRoom = new ChatRoomUser(); enterRoom.GetChatRoomUserByUserAccountID(Convert.ToInt32(mu.ProviderUserKey)); if (enterRoom.RoomID == 0) { enterRoom = new ChatRoomUser { CreatedByUserID = Convert.ToInt32(mu.ProviderUserKey), ConnectionCode = id }; enterRoom.Create(); } else { enterRoom.UpdatedByUserID = Convert.ToInt32(mu.ProviderUserKey); enterRoom.ConnectionCode = id; enterRoom.Update(); } } // send to caller Clients.Caller.onConnected(id, userName, ConnectedUsers, CurrentMessage); // send to all except caller client Clients.AllExcept(id).onNewUserConnected(id, userName); }
// // GET: /ChatRoom/ public ActionResult ChatIndex(int numMsg = -1) { int userid = (int)Session["userid"]; ChatRoomUser user = Db.users.Where(m => m.Id == userid).FirstOrDefault(); if (Db.currentRoom == null) { ChatRoom mRoom = Db.chatRooms.Where(c => c.isCurrent == true).FirstOrDefault(); //if (mRoom != null) //{ Db.currentRoom = mRoom; //} //else //{ //return View("SideBar", Db); //Db.currentRoom = Db.chatRooms.FirstOrDefault(); //} } if (Db.currentRoom != null) { Db.currentRoom.messageCount = 0; Db.currentRoom.isCurrent = true; if (!Db.currentRoom.Users.Contains(user)) { Db.currentRoom.Users.Add(user); } //Db.currentRoom.messages = Db.messages.ToList();//Db.messages.Where(m => m.Room.id == Db.currentRoom.id).ToList(); } if (numMsg != -1) { Db.currentRoom.maxMessages = numMsg; } Db.SaveChanges(); return(View("ChatIndex", Db)); }
//Mesajlaşmak istediğim kullanıcının kullanıcı adını parametre ile metoda yolluyorum. public IActionResult ShowChatRoom(string userName) { using (var transaction = db.Database.BeginTransaction()) { try { List <ChatRoom> chatRooms = new List <ChatRoom>(); ChatRoom chat = null; //Online olan kullanıcının tüm bilgilerine artık currentUser değişkenimden ulaşacağım. var currentUser = db.Users.FirstOrDefault(x => x.UserName == HttpContext.Session.GetString("UserName")); //Parametreden gelen isime sahip olan kullanıcya artık bu değişkenden ulaşacağım. var user = db.Users.FirstOrDefault(x => x.UserName == userName); //Razor Page'da bu kullanıcının ID bilgisini tutmam gerek. ViewBag.UserId = user.Id; //ChatRoomUser tablosundan online olan kullanıcının kayıtlarını getirdim. var myChatRoom = db.ChatRoomUsers.Where(x => x.UserId == currentUser.Id).ToList(); //Online olan kullanıcı, daha önce başka kullanıcılar ile mesajlaşmış mı yoksa mesajlaşmamış mı bunun kontrolünü yapıyorum. if (myChatRoom.Count != 0) { //Eğer mesajlaşmışsa bu kullanıcının var olan ChatRoomlarını bu listeye aldım. foreach (var item in myChatRoom) { chatRooms.AddRange(db.ChatRooms.Where(x => x.Id == item.ChatRoomId)); } //Online olan kullanıcının ChatRoomlarının içinde dolaşıyorum. foreach (var chatroom in chatRooms) { //Online olan kullanıcı daha önce parametreden gelen kullanıcı ile mesajlaşmış mı? bunun kontrolünü yapıyorum. if (db.ChatRoomUsers.Any(x => x.ChatRoomId == chatroom.Id && x.UserId == user.Id)) { //Eğer mesajlaşmışsa bu iki kullanıcının ortak olan ChatRoomunu getiriyorum(çünkü View kısmında bu ChatRoomu listeleyeceğim.) var chatroomuser = myChatRoom.Where(x => x.ChatRoomId == chatroom.Id).FirstOrDefault(); //Ortak olan ChatRoomu bulduk. chat = db.ChatRooms.FirstOrDefault(x => x.Id == chatroomuser.ChatRoomId); } //Eğer online olan kullanıcı daha önce hiç parametreden kullanıcı ile mesajlaşmamışsa,bu kullanıcı ile ortak bir ChatRoom yaratıyorum. else { chat = new ChatRoom(); db.ChatRooms.Add(chat); db.SaveChanges(); ChatRoomUser chatRoomUser = new ChatRoomUser(); chatRoomUser.ChatRoomId = chat.Id; chatRoomUser.UserId = user.Id; db.ChatRoomUsers.Add(chatRoomUser); db.SaveChanges(); ChatRoomUser chatRoomUser2 = new ChatRoomUser(); chatRoomUser2.UserId = currentUser.Id; chatRoomUser2.ChatRoomId = chat.Id; db.ChatRoomUsers.Add(chatRoomUser2); db.SaveChanges(); transaction.Commit(); } } } //Eğer online olan kullanıcı daha önce kimseyle mesajlaşmamış ise, parametreden gelen kullanıcı ile ortak bir ChatRoom yaratıyorum. else { chat = new ChatRoom(); db.ChatRooms.Add(chat); db.SaveChanges(); ChatRoomUser chatRoomUser = new ChatRoomUser(); chatRoomUser.ChatRoomId = chat.Id; chatRoomUser.UserId = user.Id; db.ChatRoomUsers.Add(chatRoomUser); db.SaveChanges(); ChatRoomUser chatRoomUser2 = new ChatRoomUser(); chatRoomUser2.UserId = currentUser.Id; chatRoomUser2.ChatRoomId = chat.Id; db.ChatRoomUsers.Add(chatRoomUser2); db.SaveChanges(); transaction.Commit(); } //ChatRoomu view sayfamda gösteriyorum. return(View(chat)); } catch (Exception) { transaction.Rollback(); throw; } } }
public ActionResult LogOff() { if (Membership.GetUser() == null) { FormsAuthentication.SignOut(); return RedirectToAction("Index", "Home"); } ua = new UserAccount(Membership.GetUser().UserName); ua.IsOnLine = false; ua.SigningOut = true; ua.Update(); ua.RemoveCache(); ChatRoomUser cru = new ChatRoomUser(); cru.GetChatRoomUserByUserAccountID(ua.UserAccountID); cru.DeleteChatRoomUser(); FormsAuthentication.SignOut(); return RedirectToAction("Index", "Home"); }
public async void Add(ChatRoomUser user) { context.ChatRoomUsers.Add(user); await SendUpdateAsync(); }
public ActionResult LogOff() { if (MembershipWrapper.GetUser() == null) { FormsAuthentication.SignOut(); return RedirectToAction("Index", "Home"); } MembershipUser membershipUser = MembershipWrapper.GetUser(); if (membershipUser != null) _ua = new UserAccount(membershipUser.UserName) {IsOnLine = false, SigningOut = true}; _ua.Update(); _ua.RemoveCache(); var cru = new ChatRoomUser(); cru.GetChatRoomUserByUserAccountID(_ua.UserAccountID); cru.DeleteChatRoomUser(); FormsAuthentication.SignOut(); return RedirectToAction("Index", "Home"); }
/// <summary> /// 创建一个消息. /// </summary> /// <param name="message"></param> /// <param name="resultMsg"></param> /// <returns></returns> public bool CreateNewMessage(ChatRoomMessage message, ref string resultMsg) { bool result = false; try { using (MyChatRoomContext context = new MyChatRoomContext()) { // 检查 发消息用户. ChatRoomUser user = context.ChatRoomUsers.Find(message.MessageSenderId); if (user == null) { resultMsg = String.Format("用户 {0} 不存在!", message.MessageSenderId); return(result); } if (user.IsGag) { resultMsg = String.Format("用户 {0} 已经被禁言!", user.UserName); return(result); } // 如果指定了 接受者, 那么检查是否存在. if (message.MessageReceiverId != null) { ChatRoomUser userTo = context.ChatRoomUsers.Find(message.MessageReceiverId); if (userTo == null) { resultMsg = String.Format("用户 {0} 不存在!", message.MessageReceiverId); return(result); } } // 如果指定了 回复消息。 检查 回复消息是否存在. if (message.ReplyMessageId != null) { ChatRoomMessage replyMessag = context.ChatRoomMessages.Find(message.ReplyMessageId.Value); if (replyMessag == null) { resultMsg = String.Format("回复的消息 {0} 不存在!", message.ReplyMessageId); return(result); } // 填写回复的 用户ID 与 昵称. message.MessageReceiverId = replyMessag.MessageSenderId; message.MessageReceiverNickName = replyMessag.MessageSenderNickName; } // 获取消息发送的房间. var house = context.ChatRoomHouses.Find(message.HouseID); if (house == null) { resultMsg = String.Format("直播室房间 {0} 不存在!", message.HouseID); return(result); } // 判断指定房间, 消息是否需要审核. if (house.IsChatRoomMessageAutoPass) { // 直播室房间, 自动审核通过. message.AuditingPass(); message.AuditingIp = "-"; message.AuditingBy = "AUTO"; } else { // 直播室房间, 要求审核. // 检查用户的属性. if (user.IsAutoPass) { // 帐户能够直接审核通过. message.AuditingPass(); message.AuditingIp = "-"; message.AuditingBy = "AUTO"; } else { // 待审核. message.AuditingFlag = "WAIT"; } } // 发送者头像, 按照用户等级来处理. message.MessageSenderPhoto = "/images/level/" + user.UserLevel.UserLevelIcon; // 发信人昵称. if (String.IsNullOrEmpty(message.MessageSenderNickName)) { message.MessageSenderNickName = user.UserNickName; } // 当前时间 - 两条短消息之间的间隔 秒数. DateTime disableTime = DateTime.Now.AddSeconds(-1 * TwoMessageSecondLimit); // 两条短消息之间的间隔 秒数. var prevMessageQuery = from data in context.ChatRoomMessages where // 同一 发送人. data.MessageSenderId == message.MessageSenderId && data.MessageSenderNickName == message.MessageSenderNickName // 仅仅判断今天的. && data.CreateTime > disableTime orderby data.CreateTime descending select data; if (prevMessageQuery.Count() > 0) { // 存在有重复提交的情况. resultMsg = "您消息发送得太频繁了......"; return(result); } message.BeforeInsertOperation("Web"); // 插入. context.ChatRoomMessages.Add(message); // 物理保存. context.SaveChanges(); // 如果能执行到这里, 认为处理成功. result = true; } } catch (System.Data.Entity.Validation.DbEntityValidationException dbErr) { logger.Info(message); foreach (var errItem in dbErr.EntityValidationErrors) { foreach (var err in errItem.ValidationErrors) { logger.InfoFormat("{0} : {1}", err.PropertyName, err.ErrorMessage); } } logger.Error(dbErr.Message, dbErr); result = false; resultMsg = dbErr.Message; } catch (Exception ex) { logger.Error(ex.Message, ex); result = false; resultMsg = ex.Message; } return(result); }
public override Task OnDisconnected(bool stopCalled) { UserDetail item = ConnectedUsers.FirstOrDefault(x => x.ConnectionId == Context.ConnectionId); if (item == null) return base.OnDisconnected(false); ConnectedUsers.Remove(item); string id = Context.ConnectionId; Clients.All.onUserDisconnected(id, item.UserName); var exitRoom = new ChatRoomUser(); exitRoom.GetChatRoomUserByConnection(id); exitRoom.DeleteChatRoomUser(); return base.OnDisconnected(true); }
/// <summary> /// 重写链接事件 /// </summary> /// <returns></returns> public override Task OnConnected() { if (logger.IsDebugEnabled) { logger.DebugFormat("聊天Hub:外部建立新连接 {0} OnConnected Start.", Context.ConnectionId); } // 查询用户。 var user = UserList.SingleOrDefault(u => u.ContextID == Context.ConnectionId); if (logger.IsDebugEnabled) { logger.DebugFormat("尝试从 当前用户列表中, 查询当前连接用户 {0}, 结果:{1}", Context.ConnectionId, user); } // 判断用户是否存在,否则添加进集合 if (user == null) { ChatRoomUser chatRoomUser = GetCurrentChatRoomUser(); user = new OnlineUser() { // 用户ID. UserID = chatRoomUser.UserID, // 用户名 Name = chatRoomUser.UserName, // 昵称. NickName = chatRoomUser.UserNickName, // 会话ID. ContextID = Context.ConnectionId, // 进入时间. EnterTime = DateTime.Now, }; lock (UserList) { if (DateTime.Now.Hour == 8 && DateTime.Now.Minute < 10) { var query = from data in UserList where data.EnterTime < DateTime.Now.AddDays(-1) select data; List <OnlineUser> removeList = query.ToList(); foreach (var removeItem in removeList) { UserList.Remove(removeItem); } } // 加入用户列表. UserList.Add(user); } if (logger.IsDebugEnabled) { logger.DebugFormat("检测到当前连接用户 {0} 为新用户, 将其加入在线用户列表:{1}", Context.ConnectionId, user); } } if (logger.IsDebugEnabled) { logger.Debug("聊天Hub:外部建立新连接 OnConnected Finish!"); } return(base.OnConnected()); }
public void ProcessRequest(HttpContext context) { if (string.IsNullOrEmpty(context.Request.QueryString[SiteEnums.QueryStringNames.param_type.ToString()])) return; var ptyc = (SiteEnums.QueryStringNames) Enum.Parse(typeof (SiteEnums.QueryStringNames), context.Request.QueryString[SiteEnums.QueryStringNames.param_type.ToString()]); MembershipUser mu; switch (ptyc) { case SiteEnums.QueryStringNames.status_update: #region status_update string key = context.Request.QueryString[SiteEnums.QueryStringNames.status_update_id.ToString()]; if (string.IsNullOrEmpty(key)) { key = context.Request.QueryString[ SiteEnums.QueryStringNames.most_applauded_status_update_id.ToString()]; } int statusUpdateID = Convert.ToInt32(key); StatusUpdate statup; if ( !string.IsNullOrEmpty( context.Request.QueryString[SiteEnums.QueryStringNames.stat_update_rsp.ToString()])) { mu = MembershipWrapper.GetUser(); if (mu == null) return; var ack = new Acknowledgement { CreatedByUserID = Convert.ToInt32(mu.ProviderUserKey), UserAccountID = Convert.ToInt32(mu.ProviderUserKey), AcknowledgementType = Convert.ToChar( context.Request.QueryString[SiteEnums.QueryStringNames.stat_update_rsp.ToString()]), StatusUpdateID = statusUpdateID }; statup = new StatusUpdate(statusUpdateID); if (!Acknowledgement.IsUserAcknowledgement(statusUpdateID, Convert.ToInt32(mu.ProviderUserKey))) { ack.Create(); var sun = new StatusUpdateNotification(); if (ack.AcknowledgementType == Convert.ToChar(SiteEnums.ResponseType.A.ToString())) { sun.GetStatusUpdateNotificationForUserStatus(statup.UserAccountID, statusUpdateID, SiteEnums.ResponseType.A); } if (Convert.ToInt32(mu.ProviderUserKey) != statup.UserAccountID) { sun.UserAccountID = statup.UserAccountID; SiteEnums.ResponseType rspType; if (ack.AcknowledgementType == Convert.ToChar(SiteEnums.ResponseType.A.ToString())) { rspType = SiteEnums.ResponseType.A; sun.ResponseType = Convert.ToChar(rspType.ToString()); } else { rspType = SiteEnums.ResponseType.B; sun.ResponseType = Convert.ToChar(rspType.ToString()); } sun.CreatedByUserID = Convert.ToInt32(mu.ProviderUserKey); sun.UpdatedByUserID = Convert.ToInt32(mu.ProviderUserKey); if (sun.StatusUpdateNotificationID == 0) { sun.IsRead = false; sun.Create(); } else { sun.IsRead = false; sun.Update(); } SendNotificationEmail(statup.UserAccountID, Convert.ToInt32(mu.ProviderUserKey), rspType, sun.StatusUpdateID); } context.Response.Write(string.Format(@"{{""StatusAcks"": ""{0}""}}", HttpUtility.HtmlEncode(statup.StatusAcknowledgements))); } else { // reverse ack.GetAcknowledgement(statusUpdateID, Convert.ToInt32(mu.ProviderUserKey)); ack.Delete(); // TODO: DELETE NOTIFICATION context.Response.Write(string.Format(@"{{""StatusAcks"": ""{0}""}}", HttpUtility.HtmlEncode(statup.StatusAcknowledgements))); } } else if ( !string.IsNullOrEmpty( context.Request.QueryString[ SiteEnums.QueryStringNames.stat_update_comment_rsp.ToString()])) { mu = MembershipWrapper.GetUser(); if (mu == null) return; var ack = new StatusCommentAcknowledgement { CreatedByUserID = Convert.ToInt32(mu.ProviderUserKey), UserAccountID = Convert.ToInt32(mu.ProviderUserKey), AcknowledgementType = Convert.ToChar( context.Request.QueryString[ SiteEnums.QueryStringNames.stat_update_comment_rsp.ToString()]), StatusCommentID = statusUpdateID }; var statcomup = new StatusComment(statusUpdateID); statup = new StatusUpdate(statcomup.StatusUpdateID); if (!StatusCommentAcknowledgement.IsUserCommentAcknowledgement(statcomup.StatusCommentID, Convert.ToInt32( mu.ProviderUserKey))) { ack.Create(); var sun = new StatusUpdateNotification(); sun.GetStatusUpdateNotificationForUserStatus(statcomup.UserAccountID, statcomup.StatusUpdateID, ack.AcknowledgementType == Convert.ToChar( SiteEnums.ResponseType.A.ToString()) ? SiteEnums.ResponseType.A : SiteEnums.ResponseType.B); if (Convert.ToInt32(mu.ProviderUserKey) != statcomup.UserAccountID) { sun.UserAccountID = statcomup.UserAccountID; SiteEnums.ResponseType rspType; if (ack.AcknowledgementType == Convert.ToChar(SiteEnums.ResponseType.A.ToString())) { rspType = SiteEnums.ResponseType.A; sun.ResponseType = Convert.ToChar(rspType.ToString()); } else { rspType = SiteEnums.ResponseType.B; sun.ResponseType = Convert.ToChar(rspType.ToString()); } if (sun.StatusUpdateNotificationID == 0) { sun.CreatedByUserID = Convert.ToInt32(mu.ProviderUserKey); sun.IsRead = false; sun.Create(); } else { sun.UpdatedByUserID = Convert.ToInt32(mu.ProviderUserKey); sun.IsRead = false; sun.Update(); } SendNotificationEmail(statup.UserAccountID, Convert.ToInt32(mu.ProviderUserKey), rspType, sun.StatusUpdateID); } context.Response.Write(string.Format(@"{{""StatusAcks"": ""{0}""}}", HttpUtility.HtmlEncode( statcomup.StatusCommentAcknowledgementsOptions))); } else { // reverse ack.GetCommentAcknowledgement(statusUpdateID, Convert.ToInt32(mu.ProviderUserKey)); ack.Delete(); // TODO: DELETE NOTIFICATION context.Response.Write(string.Format(@"{{""StatusAcks"": ""{0}""}}", HttpUtility.HtmlEncode( statcomup.StatusCommentAcknowledgementsOptions))); } } else if ( !string.IsNullOrEmpty( context.Request.QueryString[SiteEnums.QueryStringNames.comment_msg.ToString()]) && !string.IsNullOrEmpty( context.Request.QueryString[SiteEnums.QueryStringNames.comment_msg.ToString()]) ) { mu = MembershipWrapper.GetUser(); if (mu == null) return; var statCom = new StatusComment { CreatedByUserID = Convert.ToInt32(mu.ProviderUserKey), Message = HttpUtility.HtmlEncode( context.Request.QueryString[SiteEnums.QueryStringNames.comment_msg.ToString()]), StatusUpdateID = statusUpdateID, UserAccountID = Convert.ToInt32(mu.ProviderUserKey) }; // TODO: CHECK IF THERE IS A RECENT MESSAGE THAT IS THE SAME if (statCom.StatusCommentID != 0) return; //BUG: THERE IS AN EVENT HANDLER THAT HAS QUEUED UP TOO MANY var suLast = new StatusUpdate(); suLast.GetMostRecentUserStatus(Convert.ToInt32(mu.ProviderUserKey)); if (suLast.Message.Trim() != statCom.Message.Trim() || (suLast.Message.Trim() == statCom.Message.Trim() && suLast.StatusUpdateID != statCom.StatusUpdateID)) { statCom.Create(); } statup = new StatusUpdate(statusUpdateID); // create a status update notification for the post maker and all commenters StatusUpdateNotification sun; if (Convert.ToInt32(mu.ProviderUserKey) != statup.UserAccountID) { sun = new StatusUpdateNotification(); sun.GetStatusUpdateNotificationForUserStatus(statup.UserAccountID, statusUpdateID, SiteEnums.ResponseType.C); if (sun.StatusUpdateNotificationID == 0) { sun.ResponseType = Convert.ToChar(SiteEnums.ResponseType.C.ToString()); sun.CreatedByUserID = Convert.ToInt32(mu.ProviderUserKey); sun.IsRead = false; sun.StatusUpdateID = statup.StatusUpdateID; sun.UserAccountID = statup.UserAccountID; sun.Create(); } else { sun.IsRead = false; sun.UpdatedByUserID = Convert.ToInt32(mu.ProviderUserKey); sun.Update(); } SendNotificationEmail(statup.UserAccountID, Convert.ToInt32(mu.ProviderUserKey), SiteEnums.ResponseType.C, sun.StatusUpdateID); } var statComs = new StatusComments(); statComs.GetAllStatusCommentsForUpdate(statusUpdateID); foreach (StatusComment sc1 in statComs) { sun = new StatusUpdateNotification(); sun.GetStatusUpdateNotificationForUserStatus(statup.UserAccountID, statusUpdateID, SiteEnums.ResponseType.C); if (Convert.ToInt32(mu.ProviderUserKey) == sc1.UserAccountID || Convert.ToInt32(mu.ProviderUserKey) == statup.UserAccountID) continue; if (sun.StatusUpdateNotificationID == 0) { sun.IsRead = false; sun.StatusUpdateID = statusUpdateID; sun.UserAccountID = sc1.UserAccountID; sun.Create(); } else { sun.IsRead = false; sun.Update(); } } context.Response.Write(@"{""StatusAcks"": """ + @"""}"); } else if ( !string.IsNullOrEmpty( context.Request.QueryString[SiteEnums.QueryStringNames.act_type.ToString()]) && context.Request.QueryString[SiteEnums.QueryStringNames.act_type.ToString()] == "P" ) { // delete post statup = new StatusUpdate(statusUpdateID); StatusUpdateNotifications.DeleteNotificationsForStatusUpdate(statup.StatusUpdateID); Acknowledgements.DeleteStatusAcknowledgements(statup.StatusUpdateID); var statComs = new StatusComments(); statComs.GetAllStatusCommentsForUpdate(statup.StatusUpdateID); foreach (StatusComment sc1 in statComs) { StatusCommentAcknowledgements.DeleteStatusCommentAcknowledgements( sc1.StatusCommentID); } StatusComments.DeleteStatusComments(statup.StatusUpdateID); statup.Delete(); if (statup.PhotoItemID != null) { var pitm = new PhotoItem(Convert.ToInt32(statup.PhotoItemID)); var s3 = new S3Service { AccessKeyID = AmazonCloudConfigs.AmazonAccessKey, SecretAccessKey = AmazonCloudConfigs.AmazonSecretKey }; if (s3.ObjectExists(AmazonCloudConfigs.AmazonBucketName, pitm.FilePathRaw)) { s3.DeleteObject(AmazonCloudConfigs.AmazonBucketName, pitm.FilePathRaw); } if (s3.ObjectExists(AmazonCloudConfigs.AmazonBucketName, pitm.FilePathStandard)) { s3.DeleteObject(AmazonCloudConfigs.AmazonBucketName, pitm.FilePathStandard); } if (s3.ObjectExists(AmazonCloudConfigs.AmazonBucketName, pitm.FilePathThumb)) { s3.DeleteObject(AmazonCloudConfigs.AmazonBucketName, pitm.FilePathThumb); } pitm.Delete(); } context.Response.Write(@"{""StatusAcks"": """ + @"""}"); } else if ( !string.IsNullOrEmpty( context.Request.QueryString[SiteEnums.QueryStringNames.act_type.ToString()]) && context.Request.QueryString[SiteEnums.QueryStringNames.act_type.ToString()] == "C" ) { // delete comment var statCom = new StatusComment( Convert.ToInt32( context.Request.QueryString[ SiteEnums.QueryStringNames.status_com_id.ToString()])); StatusCommentAcknowledgements.DeleteStatusCommentAcknowledgements( statCom.StatusCommentID); statCom.Delete(); context.Response.Write(string.Format(@"{{""StatusUpdateID"": ""{0}""}}", statCom.StatusUpdateID)); } else if (!string.IsNullOrEmpty( context.Request.QueryString[SiteEnums.QueryStringNames.all_comments.ToString()])) { mu = MembershipWrapper.GetUser(); if (mu == null) return; var preFilter = new StatusComments(); preFilter.GetAllStatusCommentsForUpdate(statusUpdateID); var statComs = new StatusComments(); statComs.AddRange( preFilter.Where( su1 => !BlockedUser.IsBlockingUser(Convert.ToInt32(mu.ProviderUserKey), su1.UserAccountID))); statComs.IncludeStartAndEndTags = true; var sb = new StringBuilder(100); sb.Append(statComs.ToUnorderdList); context.Response.Write(string.Format(@"{{""StatusComs"": ""{0}""}}", HttpUtility.HtmlEncode(sb.ToString()))); } else if (!string.IsNullOrEmpty( context.Request.QueryString[SiteEnums.QueryStringNames.comment_page.ToString()])) { int pcount = Convert.ToInt32( context.Request.QueryString[ SiteEnums.QueryStringNames.comment_page.ToString()]); var statups = new StatusUpdates(); pcount = pcount + 10; var preFilter = new StatusUpdates(); preFilter.GetStatusUpdatesPageWise(pcount, 1); mu = MembershipWrapper.GetUser(); statups.AddRange( preFilter.Where( su1 => mu != null && !BlockedUser.IsBlockingUser(Convert.ToInt32(mu.ProviderUserKey), su1.UserAccountID))); statups.IncludeStartAndEndTags = false; context.Response.Write(string.Format(@"{{""StatusUpdates"": ""{0}""}}", HttpUtility.HtmlEncode(statups.ToUnorderdList))); } #endregion break; case SiteEnums.QueryStringNames.begin_playlist: #region begin_playlist context.Response.Write( PlaylistVideo.GetFirstVideo(Convert.ToInt32(context.Request.QueryString[ SiteEnums.QueryStringNames.playlist.ToString()]))); #endregion break; case SiteEnums.QueryStringNames.menu: #region menu mu = MembershipWrapper.GetUser(); int userCountChat = 0; int userMessages = 0; int unconfirmedUsers = 0; int notifications = 0; if (mu != null) { // log off users who are offline var uasOffline = new UserAccounts(); uasOffline.GetWhoIsOffline(true); foreach (UserAccount uaoff1 in uasOffline) { var cru = new ChatRoomUser(); cru.GetChatRoomUserByUserAccountID(uaoff1.UserAccountID); if (cru.ChatRoomUserID > 0) { cru.DeleteChatRoomUser(); } var offlineUser = new UserAccount(uaoff1.UserAccountID); offlineUser.RemoveCache(); } userCountChat = ChatRoomUsers.GetChattingUserCount(); userMessages = DirectMessages.GetDirectMessagesToUserCount(mu); unconfirmedUsers = UserConnections.GetCountUnconfirmedConnections(Convert.ToInt32(mu.ProviderUserKey)); } // get users online int onlineUsers = UserAccounts.GetOnlineUserCount(); if (mu != null) { notifications = StatusUpdateNotifications.GetStatusUpdateNotificationCountForUser( Convert.ToInt32(mu.ProviderUserKey)); } string timedMessge = string.Format( @"{{""UserCountChat"": ""{0}"", ""UserMessages"": ""{1}"", ""OnlineUsers"": ""{2}"", ""Notifications"": ""{3}"", ""UnconfirmedUsers"": ""{4}""}}", userCountChat, userMessages, onlineUsers, notifications, unconfirmedUsers); context.Response.Write(timedMessge); #endregion break; case SiteEnums.QueryStringNames.random: #region random if ( !string.IsNullOrEmpty( context.Request.QueryString[SiteEnums.QueryStringNames.currentvidid.ToString()])) { context.Response.Write(Video.GetRandomJSON( context.Request.QueryString[SiteEnums.QueryStringNames.currentvidid.ToString()])); } else { context.Response.Write(Video.GetRandomJSON()); } #endregion break; case SiteEnums.QueryStringNames.video_playlist: #region video_playlist if (!string.IsNullOrEmpty( context.Request.QueryString[SiteEnums.QueryStringNames.currentvidid.ToString()])) { context.Response.Write( PlaylistVideo.GetNextVideo( Convert.ToInt32( context.Request.QueryString[SiteEnums.QueryStringNames.playlist.ToString()]), context.Request.QueryString[SiteEnums.QueryStringNames.currentvidid.ToString()])); } else if ( !string.IsNullOrEmpty( context.Request.QueryString[SiteEnums.QueryStringNames.begin_playlist.ToString()])) { context.Response.Write( PlaylistVideo.GetFirstVideo( Convert.ToInt32( context.Request.QueryString[SiteEnums.QueryStringNames.playlist.ToString()]))); } else { context.Response.Write( PlaylistVideo.CurrentVideoInPlaylist( Convert.ToInt32( context.Request.QueryString[SiteEnums.QueryStringNames.playlist.ToString()]) )); } #endregion break; case SiteEnums.QueryStringNames.video: #region video var vid = new Video("YT", context.Request.QueryString[SiteEnums.QueryStringNames.vid.ToString()]); VideoLog.AddVideoLog(vid.VideoID, context.Request.UserHostAddress); context.Response.Write( Video.GetVideoJSON(context.Request.QueryString[SiteEnums.QueryStringNames.vid.ToString()])); #endregion break; case SiteEnums.QueryStringNames.playlist: #region playlist if (!string.IsNullOrEmpty( context.Request.QueryString[SiteEnums.QueryStringNames.currentvidid.ToString()])) { context.Response.Write( PlaylistVideo.GetNextVideo( Convert.ToInt32( context.Request.QueryString[SiteEnums.QueryStringNames.playlist.ToString()]), context.Request.QueryString[SiteEnums.QueryStringNames.currentvidid.ToString()])); } else if ( !string.IsNullOrEmpty( context.Request.QueryString[SiteEnums.QueryStringNames.begin_playlist.ToString()])) { context.Response.Write( PlaylistVideo.GetFirstVideo( Convert.ToInt32( context.Request.QueryString[SiteEnums.QueryStringNames.playlist.ToString()]))); } else { context.Response.Write( PlaylistVideo.CurrentVideoInPlaylist( Convert.ToInt32( context.Request.QueryString[SiteEnums.QueryStringNames.playlist.ToString()]) )); } #endregion break; } }
public void ProcessRequest(HttpContext context) { // context.Response.ContentType = "text/plain"; // context.Response.CacheControl = "no-cache"; // context.Response.AddHeader("Pragma", "no-cache"); // //context.Response.AddHeader("Pragma", "no-store"); // //context.Response.AddHeader("cache-control", "no-cache"); //context.Response.Cache.SetCacheability(HttpCacheability.NoCache); // context.Response.Cache.SetNoServerCaching(); if (string.IsNullOrEmpty(context.Request.QueryString[SiteEnums.QueryStringNames.param_type.ToString()])) return; SiteEnums.QueryStringNames ptyc = (SiteEnums.QueryStringNames)Enum.Parse(typeof(SiteEnums.QueryStringNames), context.Request.QueryString[SiteEnums.QueryStringNames.param_type.ToString()]); // Dictionary<string, Subgurim.Chat.Usuario> usrrs = null; StringBuilder sb = null; MembershipUser mu = null; switch (ptyc) { case SiteEnums.QueryStringNames.status_update: #region status_update string key = context.Request.QueryString[SiteEnums.QueryStringNames.status_update_id.ToString()]; if (string.IsNullOrEmpty(key)) { key = context.Request.QueryString[SiteEnums.QueryStringNames.most_applauded_status_update_id.ToString()]; } int statusUpdateID = Convert.ToInt32(key); StatusUpdate statup = null; if (!string.IsNullOrEmpty(context.Request.QueryString[SiteEnums.QueryStringNames.stat_update_rsp.ToString()])) { mu = Membership.GetUser(); Acknowledgement ack = new Acknowledgement(); ack.CreatedByUserID = Convert.ToInt32(mu.ProviderUserKey); ack.UserAccountID = Convert.ToInt32(mu.ProviderUserKey); ack.AcknowledgementType = Convert.ToChar(context.Request.QueryString[SiteEnums.QueryStringNames.stat_update_rsp.ToString()]); ack.StatusUpdateID = statusUpdateID; statup = new StatusUpdate(statusUpdateID); if (!Acknowledgement.IsUserAcknowledgement(statusUpdateID, Convert.ToInt32(mu.ProviderUserKey))) { ack.Create(); StatusUpdateNotification sun = new StatusUpdateNotification(); if (ack.AcknowledgementType == Convert.ToChar(SiteEnums.ResponseType.A.ToString())) { // sun.GetStatusUpdateNotificationForUserStatus(Convert.ToInt32(mu.ProviderUserKey), statusUpdateID, SiteEnums.ResponseType.A); sun.GetStatusUpdateNotificationForUserStatus(statup.UserAccountID, statusUpdateID, SiteEnums.ResponseType.A); } else if (ack.AcknowledgementType == Convert.ToChar(SiteEnums.ResponseType.B.ToString())) { //sun.GetStatusUpdateNotificationForUserStatus(Convert.ToInt32(mu.ProviderUserKey), statusUpdateID, SiteEnums.ResponseType.B); sun.GetStatusUpdateNotificationForUserStatus(statup.UserAccountID, statusUpdateID, SiteEnums.ResponseType.B); } if (Convert.ToInt32(mu.ProviderUserKey) != statup.UserAccountID) { sun.UserAccountID = statup.UserAccountID; SiteEnums.ResponseType rspType = SiteEnums.ResponseType.U; if (ack.AcknowledgementType == Convert.ToChar(SiteEnums.ResponseType.A.ToString())) { rspType = SiteEnums.ResponseType.A; sun.ResponseType = Convert.ToChar(rspType.ToString()); } else { rspType = SiteEnums.ResponseType.B; sun.ResponseType = Convert.ToChar(rspType.ToString()); } sun.CreatedByUserID = Convert.ToInt32(mu.ProviderUserKey); sun.UpdatedByUserID = Convert.ToInt32(mu.ProviderUserKey); if (sun.StatusUpdateNotificationID == 0) { sun.IsRead = false; sun.Create(); } else { sun.IsRead = false; sun.Update(); } SendNotificationEmail(statup.UserAccountID, rspType, sun.StatusUpdateID); } context.Response.Write(@"{""StatusAcks"": """ + HttpUtility.HtmlEncode(statup.StatusAcknowledgements) + @"""}"); } else { // reverse ack.GetAcknowledgement(statusUpdateID, Convert.ToInt32(mu.ProviderUserKey)); ack.Delete(); // TODO: DELETE NOTIFICATION context.Response.Write(@"{""StatusAcks"": """ + HttpUtility.HtmlEncode(statup.StatusAcknowledgements) + @"""}"); } } else if (!string.IsNullOrEmpty(context.Request.QueryString[SiteEnums.QueryStringNames.stat_update_comment_rsp.ToString()])) { mu = Membership.GetUser(); StatusCommentAcknowledgement ack = new StatusCommentAcknowledgement(); ack.CreatedByUserID = Convert.ToInt32(mu.ProviderUserKey); ack.UserAccountID = Convert.ToInt32(mu.ProviderUserKey); ack.AcknowledgementType = Convert.ToChar(context.Request.QueryString[SiteEnums.QueryStringNames.stat_update_comment_rsp.ToString()]); ack.StatusCommentID = statusUpdateID; // this is really the commentID (or should be) StatusComment statcomup = new StatusComment(statusUpdateID); statup = new StatusUpdate(statcomup.StatusUpdateID); if (!StatusCommentAcknowledgement.IsUserCommentAcknowledgement(statcomup.StatusCommentID, Convert.ToInt32(mu.ProviderUserKey))) { ack.Create(); StatusUpdateNotification sun = new StatusUpdateNotification(); if (ack.AcknowledgementType == Convert.ToChar(SiteEnums.ResponseType.A.ToString())) { sun.GetStatusUpdateNotificationForUserStatus(statcomup.UserAccountID, statcomup.StatusUpdateID, SiteEnums.ResponseType.A); } else { sun.GetStatusUpdateNotificationForUserStatus(statcomup.UserAccountID, statcomup.StatusUpdateID, SiteEnums.ResponseType.B); } if (Convert.ToInt32(mu.ProviderUserKey) != statcomup.UserAccountID) { sun.UserAccountID = statcomup.UserAccountID; SiteEnums.ResponseType rspType = SiteEnums.ResponseType.U; if (ack.AcknowledgementType == Convert.ToChar(SiteEnums.ResponseType.A.ToString())) { rspType = SiteEnums.ResponseType.A; sun.ResponseType = Convert.ToChar(rspType.ToString()); } else { rspType = SiteEnums.ResponseType.B; sun.ResponseType = Convert.ToChar(rspType.ToString()); } if (sun.StatusUpdateNotificationID == 0) { sun.CreatedByUserID = Convert.ToInt32(mu.ProviderUserKey); sun.IsRead = false; sun.Create(); } else { sun.UpdatedByUserID = Convert.ToInt32(mu.ProviderUserKey); sun.IsRead = false; sun.Update(); } SendNotificationEmail(statup.UserAccountID, rspType, sun.StatusUpdateID); } context.Response.Write(@"{""StatusAcks"": """ + HttpUtility.HtmlEncode(statcomup.StatusCommentAcknowledgementsOptions) + @"""}"); } else { // reverse ack.GetCommentAcknowledgement(statusUpdateID, Convert.ToInt32(mu.ProviderUserKey)); ack.Delete(); // TODO: DELETE NOTIFICATION context.Response.Write(@"{""StatusAcks"": """ + HttpUtility.HtmlEncode(statcomup.StatusCommentAcknowledgementsOptions) + @"""}"); } } else if (!string.IsNullOrEmpty(context.Request.QueryString[SiteEnums.QueryStringNames.comment_msg.ToString()]) && !string.IsNullOrEmpty(context.Request.QueryString[SiteEnums.QueryStringNames.comment_msg.ToString()]) ) { mu = Membership.GetUser(); if (mu == null) return; StatusComment statCom = new StatusComment(); statCom.CreatedByUserID = Convert.ToInt32(mu.ProviderUserKey); statCom.Message = HttpUtility.HtmlEncode(context.Request.QueryString[SiteEnums.QueryStringNames.comment_msg.ToString()]); statCom.StatusUpdateID = statusUpdateID; statCom.UserAccountID = Convert.ToInt32(mu.ProviderUserKey); //statCom.GetStatusCommentMessage(); // ? ignore this duplicate now // TODO: CHECK IF THERE IS A RECENT MESSAGE THAT IS THE SAME if (statCom.StatusCommentID == 0) { //BUG: THERE IS AN EVENT HANDLER THAT HAS QUEUED UP TOO MANY StatusUpdate suLast = new StatusUpdate(); suLast.GetMostRecentUserStatus(Convert.ToInt32(mu.ProviderUserKey)); if (suLast.Message.Trim() != statCom.Message.Trim() || (suLast.Message.Trim() == statCom.Message.Trim() && suLast.StatusUpdateID != statCom.StatusUpdateID)) { statCom.Create(); } statup = new StatusUpdate(statusUpdateID); // create a status update notification for the post maker and all commenters StatusUpdateNotification sun = null; if (Convert.ToInt32(mu.ProviderUserKey) != statup.UserAccountID) { sun = new StatusUpdateNotification(); sun.GetStatusUpdateNotificationForUserStatus(statup.UserAccountID, statusUpdateID, SiteEnums.ResponseType.C); if (sun.StatusUpdateNotificationID == 0) { sun.ResponseType = Convert.ToChar(SiteEnums.ResponseType.C.ToString()); sun.CreatedByUserID = Convert.ToInt32(mu.ProviderUserKey); sun.IsRead = false; sun.StatusUpdateID = statup.StatusUpdateID; sun.UserAccountID = statup.UserAccountID; sun.Create(); } else { sun.IsRead = false; sun.UpdatedByUserID = Convert.ToInt32(mu.ProviderUserKey); sun.Update(); } SendNotificationEmail(statup.UserAccountID, SiteEnums.ResponseType.C, sun.StatusUpdateID); } StatusComments statComs = new StatusComments(); statComs.GetAllStatusCommentsForUpdate(statusUpdateID); foreach (StatusComment sc1 in statComs) { sun = new StatusUpdateNotification(); sun.GetStatusUpdateNotificationForUserStatus(statup.UserAccountID, statusUpdateID, SiteEnums.ResponseType.C); if (Convert.ToInt32(mu.ProviderUserKey) == sc1.UserAccountID || Convert.ToInt32(mu.ProviderUserKey) == statup.UserAccountID) continue; if (sun.StatusUpdateNotificationID == 0) { sun.IsRead = false; sun.StatusUpdateID = statusUpdateID; sun.UserAccountID = sc1.UserAccountID; sun.Create(); } else { sun.IsRead = false; sun.Update(); } } context.Response.Write(@"{""StatusAcks"": """ + @"""}"); } } else if (!string.IsNullOrEmpty(context.Request.QueryString[SiteEnums.QueryStringNames.act_type.ToString()]) && context.Request.QueryString[SiteEnums.QueryStringNames.act_type.ToString()] == "P" ) { // delete post statup = new StatusUpdate(statusUpdateID); StatusUpdateNotifications.DeleteNotificationsForStatusUpdate(statup.StatusUpdateID); Acknowledgements.DeleteStatusAcknowledgements(statup.StatusUpdateID); StatusComments statComs = new StatusComments(); statComs.GetAllStatusCommentsForUpdate(statup.StatusUpdateID); foreach (StatusComment sc1 in statComs) { StatusCommentAcknowledgements.DeleteStatusCommentAcknowledgements(sc1.StatusCommentID); } StatusComments.DeleteStatusComments(statup.StatusUpdateID); statup.Delete(); if (statup.PhotoItemID != null) { PhotoItem pitm = new PhotoItem(Convert.ToInt32(statup.PhotoItemID)); S3Service s3 = new S3Service(); s3.AccessKeyID = AmazonCloudConfigs.AmazonAccessKey; s3.SecretAccessKey = AmazonCloudConfigs.AmazonSecretKey; if (s3.ObjectExists(AmazonCloudConfigs.AmazonBucketName, pitm.FilePathRaw)) { s3.DeleteObject(AmazonCloudConfigs.AmazonBucketName, pitm.FilePathRaw); } if (s3.ObjectExists(AmazonCloudConfigs.AmazonBucketName, pitm.FilePathStandard)) { s3.DeleteObject(AmazonCloudConfigs.AmazonBucketName, pitm.FilePathStandard); } if (s3.ObjectExists(AmazonCloudConfigs.AmazonBucketName, pitm.FilePathThumb)) { s3.DeleteObject(AmazonCloudConfigs.AmazonBucketName, pitm.FilePathThumb); } pitm.Delete(); } context.Response.Write(@"{""StatusAcks"": """ + @"""}"); } else if (!string.IsNullOrEmpty(context.Request.QueryString[SiteEnums.QueryStringNames.act_type.ToString()]) && context.Request.QueryString[SiteEnums.QueryStringNames.act_type.ToString()] == "C" ) { // delete comment StatusComment statCom = new StatusComment( Convert.ToInt32(context.Request.QueryString[SiteEnums.QueryStringNames.status_com_id.ToString()])); StatusCommentAcknowledgements.DeleteStatusCommentAcknowledgements(statCom.StatusCommentID); statCom.Delete(); context.Response.Write(@"{""StatusUpdateID"": """ + statCom.StatusUpdateID.ToString() + @"""}"); } else if (!string.IsNullOrEmpty( context.Request.QueryString[SiteEnums.QueryStringNames.all_comments.ToString()])) { mu = Membership.GetUser(); if (mu == null) return; StatusComments preFilter = new StatusComments(); preFilter.GetAllStatusCommentsForUpdate(statusUpdateID); StatusComments statComs = new StatusComments(); foreach (BootBaronLib.AppSpec.DasKlub.BOL.StatusComment su1 in preFilter) { if (!BootBaronLib.AppSpec.DasKlub.BOL.BlockedUser.IsBlockingUser(Convert.ToInt32(mu.ProviderUserKey), su1.UserAccountID)) { statComs.Add(su1); } } statComs.IncludeStartAndEndTags = true; sb = new StringBuilder(100); sb.Append(statComs.ToUnorderdList); context.Response.Write(@"{""StatusComs"": """ + HttpUtility.HtmlEncode(sb.ToString()) + @"""}"); } else if (!string.IsNullOrEmpty( context.Request.QueryString[SiteEnums.QueryStringNames.comment_page.ToString()])) { int pcount = Convert.ToInt32(context.Request.QueryString[SiteEnums.QueryStringNames.comment_page.ToString()]); StatusUpdates statups = new StatusUpdates(); pcount = pcount + 10; StatusUpdates preFilter = new StatusUpdates(); preFilter.GetStatusUpdatesPageWise(pcount, 1); StatusUpdates sus = new StatusUpdates(); mu = Membership.GetUser(); foreach (BootBaronLib.AppSpec.DasKlub.BOL.StatusUpdate su1 in preFilter) { if (!BootBaronLib.AppSpec.DasKlub.BOL.BlockedUser.IsBlockingUser(Convert.ToInt32(mu.ProviderUserKey), su1.UserAccountID)) { statups.Add(su1); } } statups.IncludeStartAndEndTags = false; context.Response.Write(@"{""StatusUpdates"": """ + HttpUtility.HtmlEncode(statups.ToUnorderdList) + @"""}"); } #endregion break; case SiteEnums.QueryStringNames.begin_playlist: #region begin_playlist context.Response.Write( PlaylistVideo.GetFirstVideo(Convert.ToInt32(context.Request.QueryString[ SiteEnums.QueryStringNames.playlist.ToString()]))); #endregion break; case SiteEnums.QueryStringNames.menu: #region menu mu = Membership.GetUser(); // menu updates // get count in video room int userCountChat = 0; // get new mail int userMessages = 0; // get new users int unconfirmedUsers = 0; // status notifications int notifications = 0; if (mu != null) { // log off users who are offline UserAccounts uasOffline = new UserAccounts(); uasOffline.GetWhoIsOffline(true); UserAccount offlineUser = null; foreach (UserAccount uaoff1 in uasOffline) { ChatRoomUser cru = new ChatRoomUser(); cru.GetChatRoomUserByUserAccountID(uaoff1.UserAccountID); if (cru.ChatRoomUserID > 0) { cru.DeleteChatRoomUser(); } offlineUser = new UserAccount(uaoff1.UserAccountID); offlineUser.RemoveCache(); } userCountChat = ChatRoomUsers.GetChattingUserCount(); userMessages = BootBaronLib.AppSpec.DasKlub.BOL.DirectMessages.GetDirectMessagesToUserCount(mu); unconfirmedUsers = BootBaronLib.AppSpec.DasKlub.BOL.UserConnections.GetCountUnconfirmedConnections(Convert.ToInt32(mu.ProviderUserKey)); } // get users online int onlineUsers = UserAccounts.GetOnlineUserCount(); if (mu != null) { notifications = StatusUpdateNotifications.GetStatusUpdateNotificationCountForUser(Convert.ToInt32(mu.ProviderUserKey)); } string timedMessge = string.Format( @"{{""UserCountChat"": ""{0}"", ""UserMessages"": ""{1}"", ""OnlineUsers"": ""{2}"", ""Notifications"": ""{3}"", ""UnconfirmedUsers"": ""{4}""}}",userCountChat,userMessages,onlineUsers,notifications,unconfirmedUsers); context.Response.Write(timedMessge); #endregion break; case SiteEnums.QueryStringNames.random: #region random if (!string.IsNullOrEmpty(context.Request.QueryString[SiteEnums.QueryStringNames.currentvidid.ToString()])) { context.Response.Write(Video.GetRandomJSON( context.Request.QueryString[SiteEnums.QueryStringNames.currentvidid.ToString()])); } else { context.Response.Write(Video.GetRandomJSON()); } #endregion break; case SiteEnums.QueryStringNames.video_playlist: #region video_playlist if (!string.IsNullOrEmpty( context.Request.QueryString[SiteEnums.QueryStringNames.currentvidid.ToString()])) { context.Response.Write( PlaylistVideo.GetNextVideo(Convert.ToInt32(context.Request.QueryString[SiteEnums.QueryStringNames.playlist.ToString()]), context.Request.QueryString[SiteEnums.QueryStringNames.currentvidid.ToString()])); } else if (!string.IsNullOrEmpty(context.Request.QueryString[SiteEnums.QueryStringNames.begin_playlist.ToString()])) { context.Response.Write( PlaylistVideo.GetFirstVideo(Convert.ToInt32(context.Request.QueryString[SiteEnums.QueryStringNames.playlist.ToString()]))); } else { context.Response.Write( PlaylistVideo.CurrentVideoInPlaylist( Convert.ToInt32(context.Request.QueryString[SiteEnums.QueryStringNames.playlist.ToString()]) )); } #endregion break; case SiteEnums.QueryStringNames.video: #region video Video vid = new Video("YT", context.Request.QueryString[SiteEnums.QueryStringNames.vid.ToString()]); VideoLog.AddVideoLog(vid.VideoID, context.Request.UserHostAddress); context.Response.Write(Video.GetVideoJSON(context.Request.QueryString[SiteEnums.QueryStringNames.vid.ToString()])); #endregion break; case SiteEnums.QueryStringNames.begindate: #region begindate //string[] dates = HttpUtility.UrlDecode( // context.Request.QueryString[SiteEnums.QueryStringNames.begindate.ToString()] // ).Split('G'); DateTime dtBegin = Convert.ToDateTime(context.Request.QueryString[SiteEnums.QueryStringNames.begindate.ToString()]); dtBegin = new DateTime(dtBegin.Year, dtBegin.Month, 1); DateTime dtEnd = dtBegin.AddMonths(1).AddDays(-1); Events tds = new Events(); tds.GetEventsForLocation( dtBegin, dtEnd, context.Request.QueryString[SiteEnums.QueryStringNames.country_iso.ToString()], context.Request.QueryString[SiteEnums.QueryStringNames.region.ToString()], context.Request.QueryString[SiteEnums.QueryStringNames.city.ToString()]); CalendarItems citms = GetCitms(tds, dtBegin, dtEnd, true); //[ 100, 500, 300, 200, 400 ] sb = new StringBuilder(); sb.Append("["); int processed = 1; foreach (CalendarItem ci1 in citms) { if (processed == citms.Count) { sb.Append(ci1.StartDate.Day); } else { sb.Append(ci1.StartDate.Day); sb.Append(", "); } processed++; } sb.Append("]"); context.Response.Write(sb.ToString()); #endregion break; case SiteEnums.QueryStringNames.playlist: #region playlist if (!string.IsNullOrEmpty( context.Request.QueryString[SiteEnums.QueryStringNames.currentvidid.ToString()])) { context.Response.Write( PlaylistVideo.GetNextVideo(Convert.ToInt32(context.Request.QueryString[SiteEnums.QueryStringNames.playlist.ToString()]), context.Request.QueryString[SiteEnums.QueryStringNames.currentvidid.ToString()])); } else if (!string.IsNullOrEmpty(context.Request.QueryString[SiteEnums.QueryStringNames.begin_playlist.ToString()])) { context.Response.Write( PlaylistVideo.GetFirstVideo(Convert.ToInt32(context.Request.QueryString[SiteEnums.QueryStringNames.playlist.ToString()]))); } else { context.Response.Write( PlaylistVideo.CurrentVideoInPlaylist( Convert.ToInt32(context.Request.QueryString[SiteEnums.QueryStringNames.playlist.ToString()]) )); } #endregion break; default: // ? break; } }
public void Post(ChatRoomUser user) { repositry.Add(user); }
public Task Reconnect(IEnumerable<string> groups) { UserAccount ua = new UserAccount(Context.User.Identity.Name); ChatRoomUser cru = new ChatRoomUser(); cru.GetChatRoomUserByUserAccountID(ua.UserAccountID); if (cru.ChatRoomUserID > 0) { cru.ConnectionCode = Context.ConnectionId; cru.UpdatedByUserID = ua.UserAccountID; cru.Update(); } Send(@"<i style=""color:purple;font-size:10px;font-style: italic;"">RECONNECT</i>", ua.UserAccountID); return null; }
private ChatRoomViewModel BuildViewModel(int activeRoomId) { //log the user into the database ChatRoomUser cru = Db.ChatRoomUsers .Where(u => u.UserId == CurrentUser.Id) .Where(u => u.RoomId == activeRoomId) .FirstOrDefault(); if (cru == null) { cru = new ChatRoomUser() { RoomId = activeRoomId, UserId = CurrentUser.Id }; Db.ChatRoomUsers.Add(cru); } cru.LastActivity = DateTime.UtcNow; Db.SaveChanges(); //get all chat messages that are associated with the requested room and have been issued within the last hour List <ChatMessage> chatMessages = (from message in Db.ChatMessages .Include("Author") where message.RoomId == activeRoomId orderby message.MessageDate descending select message).Take(25).ToList(); ChatRoom room = Db.ChatRooms.Where(r => r.Id == activeRoomId).FirstOrDefault(); ChatRoomViewModel vm = new ChatRoomViewModel(); //find the last date that we're returning DateTime minDate = DateTime.MinValue.AddDays(1); if (chatMessages.Count > 0) { minDate = chatMessages.LastOrDefault().MessageDate; } vm.Messages = chatMessages; vm.ActiveRoom = room; vm.InitialDocumentDate = minDate; vm.Rooms = Db.ChatRooms.Where(r => r.SchoolId == CurrentUser.SchoolId).ToList(); vm.Users = new List <ChatRoomUserViewModel>(); DateTime minActivityDate = DateTime.UtcNow.Subtract(CHAT_TIMEOUT); var roomUsers = from chatUser in Db.ChatRoomUsers where chatUser.User.SchoolId == CurrentUser.SchoolId && chatUser.RoomId == activeRoomId && chatUser.LastActivity > minActivityDate select chatUser.UserId; Dictionary <int, int> activeUsers = new Dictionary <int, int>(); foreach (int user in roomUsers) { activeUsers[user] = user; } foreach (OsbideUser user in Db.Users.Where(u => u.SchoolId == CurrentUser.SchoolId).OrderBy(u => u.FirstName)) { ChatRoomUserViewModel cvm = new ChatRoomUserViewModel(user); if (activeUsers.ContainsKey(user.Id)) { cvm.IsCssVisible = true; } UrlHelper u = new UrlHelper(this.ControllerContext.RequestContext); string url = u.Action("Picture", "Profile", new { id = cvm.Id, size = 24 }); cvm.ProfileImageUrl = url; vm.Users.Add(cvm); } return(vm); }