/// <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));
        }
예제 #3
0
        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));
        }
예제 #4
0
        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());
        }
예제 #5
0
        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 }));
        }
예제 #6
0
        /// <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);
            }
        }
예제 #7
0
        /// <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);
            }
        }
예제 #8
0
        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"));
        }
예제 #9
0
        /// <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);
        }
예제 #11
0
        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));
        }
예제 #12
0
        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));
        }
예제 #13
0
        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());
        }
예제 #14
0
        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"));
        }
예제 #15
0
        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));
        }
예제 #16
0
        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"));
        }
예제 #17
0
        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());
        }
예제 #18
0
        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");
        }
예제 #19
0
        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);
        }
예제 #20
0
        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));
            }
        }
예제 #21
0
        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));
        }
예제 #22
0
        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);
            }
        }
예제 #23
0
        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));
        }
예제 #24
0
        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));
        }
예제 #25
0
        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));
        }
예제 #26
0
파일: Chat.cs 프로젝트: dasklub/kommunity
        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);
        }
예제 #27
0
        //
        // 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;
                }
            }
        }
예제 #29
0
        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");
        }
예제 #30
0
 public async void Add(ChatRoomUser user)
 {
     context.ChatRoomUsers.Add(user);
     await SendUpdateAsync();
 }
예제 #31
0
        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");
        }
예제 #32
0
        /// <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);
        }
예제 #33
0
파일: Chat.cs 프로젝트: dasklub/kommunity
        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());
        }
예제 #35
0
        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;
            }
        }
예제 #36
0
        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;

            }
        }
예제 #37
0
 public void Post(ChatRoomUser user)
 {
     repositry.Add(user);
 }
예제 #38
0
        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;
        }
예제 #39
0
        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);
        }