public void addToRoom(int memberID, int roomid)
        {
            Groups.Add(Context.ConnectionId, roomid.ToString());
            try
            {
                Member member = new Member();
                member.LoadByPrimaryKey(memberID);
                bool isHidden = member.Status == (int)Helper.Enums.MemberStatus.Offline &&
                    Roles.IsUserInRole(member.Name, Helper.Enums.MemberRoles.InvisibleInRoom.ToString());

                RoomMember roomMember = new RoomMember();
                if (!roomMember.LoadByPrimaryKey(memberID, roomid))
                {
                    roomMember.AddNew();
                    roomMember.MemberID = memberID;
                    roomMember.RoomID = roomid;
                }
                roomMember.LastJoinDate = DateTime.Now;
                roomMember.InRoom = !isHidden;
                Room room = new Room();
                room.LoadByPrimaryKey(roomid);
                if (!room.IsColumnNull("CreatedBy"))
                {
                    if (room.CreatedBy == roomMember.MemberID)
                        roomMember.RoomMemberLevelID = (int)Helper.Enums.RoomMemberLevel.Owner;
                }
                roomMember.Save();

                Helper.ChatMember chatMember = roomMember.LoadWithSettings(roomid, roomMember.MemberID, roomMember.MemberID, null).FirstOrDefault();

                if (!isHidden)
                    Clients.Group(roomid.ToString()).addNewMember(roomid.ToString(), chatMember);
                if (roomMember.RoomMemberLevelID > (int)Helper.Enums.RoomMemberLevel.Visitor)
                    Groups.Add(Context.ConnectionId, GetRoomAdminGroupName(roomid));

                BLL.MemberLog log = new BLL.MemberLog();
                Helper.Enums.LogType lgType = Helper.Enums.LogType.EnterRoom;
                if (isHidden)
                    lgType = Helper.Enums.LogType.EnterRoomHidden;
                log.AddNew(memberID, new BLL.Log.EnterRoom() { Type = lgType, RoomID = roomid, RoomName = room.Name }, null, roomid);

                RoomMember onlineroomMember = new RoomMember();
                onlineroomMember.GetAllOnlineMembersByRoomID(roomid);
                Clients.All.updateExistingCount(roomid, onlineroomMember.RowCount);

                var item = ConnectedUsers.FirstOrDefault(m => m.MemberID == memberID);
                if (item == null)
                {
                    var newMember = new Helper.SignalRUser { ConnectionId = Context.ConnectionId, MemberName = member.Name, MemberID = member.MemberID, ProfilePic = member.ProfilePic, MemberTypeSpecID = member.MemberType.MemberTypeSpecDuration.MemberTypeSpecID };
                    ConnectedUsers.Add(newMember);
                }
            }
            catch (Exception ex)
            {

            }
        }
 protected void Page_Load(object sender, EventArgs e)
 {
     if (!IsPostBack)
     {
         Response.Write( Membership.GetNumberOfUsersOnline().ToString());
         RoomMember members = new RoomMember();
         members.CleanRooms();
     }
 }
 private void loadAdminTable()
 {
     AdminsTable.Clear();
     RoomMember roomAdmins = new RoomMember();
     roomAdmins.GetAllAdminMembersByRoomID(RoomID);
     Helper.Enums.RoomMemberLevel adminType;
     for (int i = 0; i < roomAdmins.RowCount; i++)
     {
         adminType=Helper.EnumUtil.ParseEnum<Helper.Enums.RoomMemberLevel>(roomAdmins.RoomMemberLevelID);
         AdminsTable.Rows.Add(roomAdmins.MemberID, roomAdmins.GetColumn("MemberName"), roomAdmins.RoomMemberLevelID, Helper.StringEnum.GetStringValue(adminType));
         roomAdmins.MoveNext();
     }
 }
        public void ClearQueue(int rid)
        {
            RoomMember rm = new RoomMember();
            rm.ClearQueue(rid);

            Clients.Group(rid.ToString()).clearQueue(rid);
        }
 protected void uiGridViewAdmins_RowCommand(object sender, GridViewCommandEventArgs e)
 {
     if (e.CommandName == "DeleteAdmin")
     {
         RoomMember mem = new RoomMember();
         if (mem.LoadByPrimaryKey(Convert.ToInt32(e.CommandArgument.ToString()), CurrentRoom))
         {
             if (mem.RoomMemberLevelID != (int)Helper.Enums.RoomMemberLevel.Owner)
             {
                 mem.RoomMemberLevelID = 1; //Helper.Enums.RoomMemberLevel.Visitor;
                 mem.Save();
             }
         }
         BindAdmins();
     }
 }
 public void userStartCam(int rid, int memberid)
 {
     Clients.Group(rid.ToString(), Context.ConnectionId).ShowCamLink(memberid, rid);
     Room room = new Room();
     room.LoadByPrimaryKey(rid);
     if (room.IsColumnNull("OpenCams"))
         room.OpenCams = 1;
     else
         room.OpenCams += 1;
     room.Save();
     RoomMember roomMember = new RoomMember();
     if (roomMember.LoadByPrimaryKey(memberid, rid))
     {
         roomMember.HasCam = true;
         roomMember.Save();
     }
 }
 public void userStopMic(int rid, int memberid)
 {
     Clients.Group(rid.ToString(), Context.ConnectionId).StopListenMic(memberid, rid);
     RoomMember roomMember = new RoomMember();
     if (roomMember.LoadByPrimaryKey(memberid, rid))
     {
         roomMember.HasMic = false;
         roomMember.Save();
     }
 }
        public void removeFromRoom(int memberID, int roomid)
        {
            // just remove member from signalr hub and update flag InRoom to false
            try
            {
                Clients.Group(roomid.ToString()).removeMember(memberID, roomid);
                Groups.Remove(Context.ConnectionId, roomid.ToString());

                RoomMember roomMember = new RoomMember();
                if (roomMember.LoadByPrimaryKey(memberID, roomid))
                {

                    roomMember.InRoom = false;
                    roomMember.HasCam = false;
                    roomMember.HasMic = false;
                    roomMember.SetColumnNull(RoomMember.ColumnNames.QueueOrder);
                    roomMember.Save();

                    RoomMember onlineroomMember = new RoomMember();
                    onlineroomMember.GetAllOnlineMembersByRoomID(roomid);
                    Clients.All.updateExistingCount(roomid, onlineroomMember.RowCount);

                    if (roomMember.RoomMemberLevelID > (int)Helper.Enums.RoomMemberLevel.Visitor)
                        Groups.Remove(Context.ConnectionId, GetRoomAdminGroupName(roomid));
                }
            }
            catch (Exception ex)
            {
            }
        }
        protected void uiLinkButton_Click(object sender, EventArgs e)
        {
            Helper.Enums.RoomMemberLevel currentType = Helper.EnumUtil.ParseEnum<Helper.Enums.RoomMemberLevel>(Convert.ToInt32(uiDropDownListAdminType.SelectedValue));
            /*Member currentMember = new Member();
            currentMember.LoadByPrimaryKey(Convert.ToInt32(uiHiddenFieldAdminID.Value));

            for (int i = 0; i < AdminsTable.Rows.Count; i++)
            {
                if (Convert.ToInt32(AdminsTable.Rows[i]["MemberID"].ToString()) == currentMember.MemberID)
                {
                    ClientScript.RegisterStartupScript(this.GetType(), "viewalert", "viewAdminError();", true);
                    return;
                }
            }

            AdminsTable.Rows.Add(currentMember.MemberID, currentMember.Name, (int)currentType, Helper.StringEnum.GetStringValue(currentType));
            AdminsTable.AcceptChanges();
            */
            RoomMember member = new RoomMember();
            if (member.LoadByPrimaryKey(Convert.ToInt32(uiHiddenFieldAdminID.Value), CurrentRoom))
            {
                if(member.RoomMemberLevelID != (int)Helper.Enums.RoomMemberLevel.Owner) // not owner
                    member.RoomMemberLevelID = (int)currentType;
                member.Save();
            }
            else
            {
                member.AddNew();
                member.MemberID = Convert.ToInt32(uiHiddenFieldAdminID.Value);
                member.RoomID = CurrentRoom;
                member.RoomMemberLevelID = (int)currentType;
                member.Save();
            }

            BindAdmins();
        }
        private static bool IsValideRoom(int id, bool isTemp, out Room room, out string message)
        {
            message = "";
            room = new Room();
            if (!isTemp)
            {
                RoomMemberBanning ban = new RoomMemberBanning();
                if (ban.LoadByPrimaryKey(id, BLL.Member.CurrentMemberID))
                {
                    if (ban.IsColumnNull(RoomMemberBanning.ColumnNames.EndDate) || ban.EndDate > DateTime.Now)
                    {
                        message = "تم طردك من هذه الغرفة ";
                        if (ban.IsColumnNull(RoomMemberBanning.ColumnNames.EndDate))
                            message = message + "نهائيا ولن تتمكن من الدخول مرة أخرى";
                        else
                            message = message + "لن تتمكن من دحول هذه الغرفة قبل هذا الوفت: " + Helper.Date.ToDateTimeString(ban.EndDate);

                        return false;
                    }
                }
            }
            //Room Info
            if (!room.LoadByPrimaryKey(id))
            {
                message = "غرفة غير متاحة";
                return false;
            }
            if (room.RowStatusID != (int)Helper.Enums.RowStatus.Enabled)
            {
                message = "هذه الغرفة مغلقة حاليا";
                return false;
            }

            if (!isTemp)
            {
                if (room.CreatedBy != BLL.Member.CurrentMember.MemberID)
                {
                    //check member type bot
                    string acceptedType;
                    if (!ValidateMemberLoginTypeBot(id, out acceptedType))
                    {
                        message = "عفوا هذه الغرفة تقبل الأعضاء من الفئات (" + acceptedType + ") فقط";
                        return false;
                    }
                }

                if (room.IsColumnNull("CreatedBy"))
                {
                    message = "حدث خطأ. الغرفة غير متاحة الأن";
                    return false;
                }

                RoomMember owner = new RoomMember();
                if (!room.IsColumnNull("CreatedBy"))
                {
                    if (!owner.LoadByPrimaryKey(room.CreatedBy, id))
                    {
                        message = "حدث خطأ. الغرفة غير متاحة الأن";
                        return false;
                    }
                }
            }
            return true;
        }
 public bool AddRoomToFav(string rid)
 {
     try
     {
         BLL.Member member = BLL.Member.CurrentMember;
         RoomMember rm = new RoomMember();
         if (!rm.LoadByPrimaryKey(member.MemberID, Convert.ToInt32(rid)))
         {
             rm.AddNew();
             rm.MemberID = member.MemberID;
             rm.RoomID = Convert.ToInt32(rid);
         }
         rm.IsFavorite = true;
         rm.Save();
         return true;
     }
     catch (Exception ex)
     {
         return false;
     }
 }
        public bool SendRoomFriendsBotMsg(int roomID, string message)
        {
            BLL.Room bllRoom = new Room();
            if (!bllRoom.LoadByPrimaryKey(roomID))
                return false;
            BLL.RoomMember bllRoomMember = new RoomMember();
            if (!bllRoomMember.GetRoomFriends(roomID))
                return false;
            message.Replace("\r\n", "</br>");
            List<int> recipients = bllRoomMember.DefaultView.Table.AsEnumerable().Select(m => Helper.TypeConverter.ToInt32(m[BLL.RoomMember.ColumnNames.MemberID])).ToList();
            BLL.Message msg = new BLL.Message();
            msg.AddNew();
            msg.Body = message;
            msg.SenderID = BLL.Member.CurrentMemberID;
            msg.Subject = "بوت أصدقاء الغرفة";
            msg.ToMembers = "أصدقاء غرفة -" + bllRoom.Name;
            msg.Save();
            MemberMessage memberMsg = new MemberMessage();
            //add to member sent items
            memberMsg.AddNew();
            memberMsg.MessageID = msg.ID;
            memberMsg.IsRead = true;
            foreach (int recipientID in recipients)
            {
                memberMsg.AddNew();
                memberMsg.MemberID = recipientID;
                memberMsg.MessageID = msg.ID;
            }
            memberMsg.Save();

            //send mail notifications
            NotificationHub notifications = new NotificationHub();
            for (int i = 0; i < recipients.Count; i++)
            {
                notifications.SendMailNotifications(recipients[i]);
            }

            return true;
        }
 public bool UpdateRoomMemberSetting(int rid, int mid, string setting, bool newValue)
 {
     try
     {
         RoomMember rSetting = new RoomMember();
         if (!rSetting.LoadByPrimaryKey(mid, rid))
         {
             rSetting.AddNew();
             rSetting.RoomID = rid;
             rSetting.MemberID = mid;
         }
         rSetting.SetColumn(setting, newValue);
         rSetting.Save();
     }
     catch (Exception ex)
     {
         return false;
     }
     return true;
 }
 private void CleanRooms()
 {
     BLL.RoomMember members = new RoomMember();
     members.CleanRooms();
 }
 private void loadAdminTable()
 {
     // AdminsTable.Clear();
     RoomMember currentadmins = new RoomMember();
     if (IsEdit)
         currentadmins.GetAllAdminMembersByRoomID(CurrentRoom);
     /*Helper.Enums.RoomMemberLevel adminType;
     for (int i = 0; i < currentadmins.RowCount; i++)
     {
         adminType = Helper.EnumUtil.ParseEnum<Helper.Enums.RoomMemberLevel>(currentadmins.RoomMemberLevelID);
         AdminsTable.Rows.Add(currentadmins.MemberID, currentadmins.GetColumn("MemberName"), currentadmins.RoomMemberLevelID, Helper.StringEnum.GetStringValue(adminType));
         currentadmins.MoveNext();
     }*/
 }
 private void BindAdmins()
 {
     RoomMember currentadmins = new RoomMember();
     if (IsEdit)
         currentadmins.GetAllAdminMembersByRoomID(CurrentRoom);
     uiGridViewAdmins.DataSource = currentadmins.DefaultView;
     uiGridViewAdmins.DataBind();
 }
 public void closeRoom(int roomID, int adminID, string adminName)
 {
     RoomMember roomMember = new RoomMember();
     if (!roomMember.HasExisitingMembersExceedCurrentMemberLevel(roomID, adminID))
     {
         Room r = new Room();
         if (r.LoadByPrimaryKey(roomID))
         {
             r.RowStatusID = (byte)Helper.Enums.RowStatus.TemporaryDisabled;
             r.Save();
             roomMember.OutRoomMembers(roomID);
             Clients.Group(roomID.ToString()).closeRoom(roomID, adminName);
         }
     }
     else
     {
         throw new UnauthorizedAccessException("لا يمكن غلق الغرفة فى وجود " + Helper.TypeConverter.ToString(roomMember.GetColumn("MemberName")));
     }
 }
 public void showMemberInRoom(int roomid, int memberid)
 {
     RoomMember rm = new RoomMember();
     if (rm.LoadByPrimaryKey(memberid, roomid))
     {
         rm.InRoom = true;
         rm.Save();
     }
     Clients.Group(roomid.ToString()).showMemberInRoom(roomid, memberid);
 }
        public override System.Threading.Tasks.Task OnDisconnected(bool stopCalled)
        {
            Helper.SignalRUser item = ConnectedUsers.FirstOrDefault(x => x.ConnectionId == Context.ConnectionId);
            if (item == null)
            {
                item = ConnectedUsers.FirstOrDefault(x => x.MemberName == Context.User.Identity.Name);
            }
            if (item != null)
            {
                RoomMember bllRoomMember = new RoomMember();
                if (bllRoomMember.LoadOpenedRoomsByMember(item.MemberID))
                {
                    do
                    {
                        removeFromRoom(item.MemberID, bllRoomMember.RoomID);
                    }
                    while (bllRoomMember.MoveNext());
                }
                ConnectedUsers.Remove(item);

                updateMemberOnlineStatus(item, false);
            }
            // remove user from his group by his user name
            Groups.Remove(Context.ConnectionId, Context.User.Identity.Name);

            return base.OnDisconnected(stopCalled);
        }
        public void updateMemberLevel(int roomid, int memberid, int level)
        {
            try
            {
                RoomMember rm = new RoomMember();
                if (rm.LoadByPrimaryKey(memberid, roomid))
                {
                    rm.RoomMemberLevelID = level;
                    rm.Save();
                }

                //add/remove member to/from signalR admins group
                var item = ConnectedUsers.FirstOrDefault(x => x.MemberID == memberid);
                if (level > (int)Helper.Enums.RoomMemberLevel.Visitor)
                    Groups.Add(item.ConnectionId, GetRoomAdminGroupName(roomid));
                else
                    Groups.Remove(item.ConnectionId, GetRoomAdminGroupName(roomid));

                //update clients
                Clients.Group(roomid.ToString(), Context.ConnectionId).updateMemberLevel(roomid, memberid, level);
            }
            catch { }
        }
        public static Helper.ChatRoom GetRoomInfo(int id, bool isTemp, Room room)
        {
            Helper.ChatRoom roomObject = new Helper.ChatRoom();
            roomObject.ID = id;
            roomObject.Type = "Room";
            roomObject.IsTemp = isTemp;
            roomObject.Message = "";
            roomObject.AdminMessage = "";

            //Room info
            roomObject.Name = room.Name;
            roomObject.RoomTopic = room.RoomTopic;
            roomObject.fbURL = room.FbURL;
            roomObject.tURL = room.TURL;
            roomObject.utURL = room.UtURL;
            roomObject.OpenCams = room.OpenCams;
            if (!room.IsColumnNull("CreatedBy"))
                roomObject.CreatedBy = room.CreatedBy;

            RoomBot Allbots = new RoomBot();
            roomObject.RoomBots = Allbots.GetByRoomID(id);

            if (!room.IsColumnNull("CreatedDate"))
                roomObject.CreatedDate = room.CreatedDate;

            //Room settings
            roomObject.Settings.EnableCam = room.EnableCam;
            roomObject.Settings.EnableMic = room.EnableMic;
            roomObject.Settings.MarkOnLoginWithoutWrite = room.MarkOnLoginWithoutWrite;
            roomObject.Settings.MarkOnLoginWithWrite = room.MarkOnLoginWithWrite;
            roomObject.Settings.EnableMicForAdminsOnly = room.EnableMicForAdminsOnly;
            if (room.RoomType.RoomTypeSpecDuration.RoomTypeSpecID > 1) // not a free room
                roomObject.Settings.CamCount = 8;
            else
                roomObject.Settings.CamCount = 4;
            roomObject.Settings.MaxMic = room.RoomType.RoomTypeSpecDuration.RoomTypeSpec.MicCount;
            roomObject.Settings.TypeID = room.RoomType.RoomTypeSpecDuration.RoomTypeSpecID;
            roomObject.Settings.Color = room.RoomType.RoomTypeSpecDuration.RoomTypeSpec.Color;
            //Room Members
            RoomMember roomMember = new RoomMember();
            if (!roomMember.LoadByPrimaryKey(BLL.Member.CurrentMember.MemberID, id))
            {
                roomMember.AddNew();
                roomMember.MemberID = BLL.Member.CurrentMember.MemberID;
                roomMember.RoomID = id;
            }
            roomMember.InRoom = true;
            roomMember.LastJoinDate = DateTime.Now;
            if (BLL.Member.CurrentMember.Status == (int)Helper.Enums.MemberStatus.Offline && Helper.Admin.HasRole(Helper.Enums.MemberRoles.InvisibleInRoom.ToString()))
                roomMember.InRoom = false;
            if (!room.IsColumnNull("CreatedBy"))
            {
                if (roomMember.MemberID == room.CreatedBy)
                    roomMember.RoomMemberLevelID = (int)Helper.Enums.RoomMemberLevel.Owner;
            }
            roomMember.Save();
            roomObject.CurrentMemberID = BLL.Member.CurrentMemberID;

            List<int> connectedIDs = ChatRoomHub.ConnectedUsers.Select(m => m.MemberID).ToList();
            roomObject.Members = roomMember.LoadWithSettings(id, roomObject.CurrentMemberID, null, connectedIDs);
            var currentMemberSettings = roomObject.Members.First(m => m.MemberID == roomObject.CurrentMemberID);
            if (currentMemberSettings != null)
            {
                if (room.MarkOnLoginWithWrite)
                {
                    currentMemberSettings.IsMarked = true;
                    currentMemberSettings.CanWrite = true;
                }
                if (room.MarkOnLoginWithoutWrite)
                {
                    currentMemberSettings.IsMarked = true;
                    currentMemberSettings.CanWrite = false;
                }
            }
            // load owner / admins
            //roomObject.Admins = roomMember.GetAdminsMembersByRoomID(id);

            // load cat & subcat

            Category cat = new Category();
            if (!room.IsColumnNull("CategoryID"))
            {
                cat.LoadByPrimaryKey(room.CategoryID);
                roomObject.CategoryName = cat.Name;
            }

            SubCategory scat = new SubCategory();
            if (!room.IsColumnNull("SubCategoryID"))
            {
                scat.LoadByPrimaryKey(room.SubCategoryID);
                roomObject.SubCategoryName = scat.Name;
            }
            else
            {
                roomObject.SubCategoryName = "لا يوجد";
            }

            //member level change
            roomObject.MemberLevels = Helper.EnumUtil.GetValues<Helper.Enums.RoomMemberLevel>().Where(l => (int)l < currentMemberSettings.MemberLevelID).Select(l => new
            {
                ID = (int)l,
                Name = Helper.StringEnum.GetStringValue(l)
            }).ToList();

            //messages
            //roomObject.MessageHistory = new RoomMessages().GetLatestMessags(id, 0);
            roomObject.MessageHistory = new List<Helper.ChatMessage>() { };
            ///////////////////////////

            Gift allgifts = new Gift();
            allgifts.LoadAll();
            roomObject.Gifts = allgifts.DefaultView.Table.AsEnumerable().Select(m => new { giftid = m["GiftID"], name = m["Name"], price = m["Price_Point"], picPath = m["PicPath"], AudioPath = m["AudioPath"] }).ToList();

            //bots
            RoomBot bllRoomBot = new BLL.RoomBot();
            //welcome bot
            List<Info.RoomBot> bots = bllRoomBot.GetByRoomIDandBotID(id, Helper.Enums.Bot.Welcome);
            if (bots.Count > 0)
            {
                Info.WelcomeBot infoWelcomeBot = (Info.WelcomeBot)bots.First().Settings;
                roomObject.WelcomeBot = infoWelcomeBot;
            }

            return roomObject;
        }
        protected void uiLinkButtonSaveRoom_Click(object sender, EventArgs e)
        {
            // check member type
            // check number of created rooms
            string querystring = "";
            if (Request.IsAuthenticated)
            {
                Member member = new Member();
                member.GetMemberByUserId(new Guid(Membership.GetUser().ProviderUserKey.ToString()));
                Room room = new Room();
                if (!IsEdit)
                {
                    // check no room exists with the same name
                    room.Where.Name.Value = uiTextBoxADD_Name.Text;
                    room.Where.Name.Operator = MyGeneration.dOOdads.WhereParameter.Operand.Equal;
                    room.Query.Load();
                    if (room.RowCount > 0)
                    {
                        ClientScript.RegisterStartupScript(this.GetType(), "error_roomnameexists", "$(document).ready(function (){ notify('error','حدث خطأ. إسم الغرفة موجود من قبل.');}); ", true);
                        return;
                    }

                    // max no of created room = 2
                    room.Where.WhereClauseReset();
                    room.Where.CreatedBy.Value = member.MemberID;
                    room.Where.CreatedBy.Operator = MyGeneration.dOOdads.WhereParameter.Operand.Equal;
                    room.Query.Load();
                    if (room.RowCount >= 2)
                    {
                        ClientScript.RegisterStartupScript(this.GetType(), "error_roomnameexists", "$(document).ready(function (){ notify('error','عفواً ، تم تخطى العدد المسموح للغرف الخاصة بك.');}); ", true);
                        return;
                    }
                    room.AddNew();
                    room.Name = uiTextBoxADD_Name.Text;
                    querystring = "c=true";
                }
                else
                {
                    room.LoadByPrimaryKey(CurrentRoom);
                    querystring = "e=true";
                }

                if (!IsEdit)
                {
                    room.CreatedDate = DateTime.Now;
                    room.CreatedBy = member.MemberID;
                    if (uiDropDownListADD_Category.SelectedIndex != -1)
                        room.CategoryID = Convert.ToInt32(uiDropDownListADD_Category.SelectedValue);
                    if (uiDropDownListADD_SubCategory.SelectedIndex != 0)
                        room.SubCategoryID = Convert.ToInt32(uiDropDownListADD_SubCategory.SelectedValue);

                }
                else
                {
                    if (uiDropDownListEdit_Category.SelectedIndex != -1)
                        room.CategoryID = Convert.ToInt32(uiDropDownListEdit_Category.SelectedValue);
                    if (uiDropDownListEditSubCat.SelectedIndex != 0)
                        room.SubCategoryID = Convert.ToInt32(uiDropDownListEditSubCat.SelectedValue);

                }

                if (uiFileUploadRoomPic.HasFile)
                {
                    string path = "~/" + ConfigurationManager.AppSettings["roomspics"].ToString();
                    DirectoryInfo dir = new DirectoryInfo(Server.MapPath(path + "/" + Membership.GetUser().ProviderUserKey.ToString()));
                    if (!dir.Exists)
                        dir.Create();
                    path += "/" + Membership.GetUser().ProviderUserKey.ToString() + "/" + DateTime.Now.ToString("ddMMyyyyhhmmss") + "_" + uiFileUploadRoomPic.FileName;
                    uiFileUploadRoomPic.SaveAs(Server.MapPath(path));
                    room.IconPath = path;
                }

                room.RoomPassword = uiTextBoxPassword.Text;
                room.RoomAdminPassword = uiTextBoxAdminPass.Text;
                room.RoomPasswordenabled = uiCheckBoxPasswordEnable.Checked;
                room.EnableCam = true;
                room.EnableMic = true;
               /* room.EnableCam = uiCheckBoxEnableCam.Checked;
                room.EnableOneMic = uiCheckBoxEnableOneMic.Checked;
                room.EnableTwoMic = uiCheckBoxEnableTwoMic.Checked;
                room.EnableThreeMic = uiCheckBoxEnableThreeMic.Checked;*/
                room.RowStatusID = 1;
                room.Save();

                // update room count for cats & subcats
                IHubContext _Rcontext = GlobalHost.ConnectionManager.GetHubContext<ChatRoomHub>();
                Room rooms = new Room();
                rooms.GetRoomsByCreatorID(Member.CurrentMemberID);
                _Rcontext.Clients.Group(member.UserName).updateRoomCount(0, 0, rooms.RowCount, true);

                rooms.GetRoomsByCategoryID(room.CategoryID);
                _Rcontext.Clients.All.updateRoomCount(room.CategoryID, 0, rooms.RowCount, false);

                if (!room.IsColumnNull(Room.ColumnNames.SubCategoryID))
                {
                    rooms.GetRoomsBySubCategoryID(room.SubCategoryID);
                    _Rcontext.Clients.All.updateRoomCount(0, room.SubCategoryID, rooms.RowCount, false);
                }

                /* add room owner */
                RoomMember roommember = new RoomMember();
                roommember.AddNew();
                roommember.RoomID = room.RoomID;
                roommember.MemberID = room.CreatedBy;
                roommember.RoomMemberLevelID = (int)Helper.Enums.RoomMemberLevel.Owner;
                roommember.Save();

                uiPanelSuccess.Visible = true;
                uiTextBoxADD_Name.Text = "";
                uiDropDownListADD_Category.SelectedIndex = 0;
                uiDropDownListADD_SubCategory.SelectedIndex = 0;
                uiTextBoxPassword.Text = "";
                uiTextBoxAdminPass.Text = "";
                uiCheckBoxPasswordEnable.Checked = false;

                // log
                if (!IsEdit)
                {
                    BLL.MemberLog log = new BLL.MemberLog();
                    log.AddNew(BLL.Member.CurrentMemberID, new BLL.Log.CreateRoom() { RoomID = room.RoomID, RoomName = room.Name }, null, room.RoomID);
                }

               /* if (AdminsTable.Rows.Count > 0)
                {
                    RoomMember roommember = new RoomMember();
                    roommember.GetAllAdminMembersByRoomID(room.RoomID);
                    roommember.DeleteAll();
                    roommember.Save();

                    RoomMember toAdd = new RoomMember();
                    for (int i = 0; i < AdminsTable.Rows.Count; i++)
                    {
                        if (Convert.ToInt32(AdminsTable.Rows[i]["MemberID"].ToString()) == room.CreatedBy)
                            continue;
                        toAdd.AddNew();
                        toAdd.RoomID = room.RoomID;
                        toAdd.MemberID = Convert.ToInt32(AdminsTable.Rows[i]["MemberID"].ToString());
                        toAdd.RoomMemberLevelID = Convert.ToInt32(AdminsTable.Rows[i]["AdminTypeID"].ToString());
                    }

                    toAdd.Save();
                }
                else
                {
                    RoomMember roommember = new RoomMember();
                    roommember.AddNew();
                    roommember.RoomID = room.RoomID;
                    roommember.MemberID = room.CreatedBy;
                    roommember.RoomMemberLevelID = (int)Helper.Enums.RoomMemberLevel.Owner;
                    roommember.Save();
                }
                */
                CurrentRoom = room.RoomID;
                Response.Redirect("createRoom.aspx?IsEdit=true&" +querystring);

            }
        }
 /// <summary>
 /// Eskat or Cancel Eskat of room member
 /// </summary>
 /// <param name="rid"></param>
 /// <param name="isMarked"></param>
 /// <param name="memberid"></param>
 public void ToggleUserMark(int rid, bool isMarked, int memberid)
 {
     if (isMarked)
         Clients.Group(rid.ToString()).UserMarked(rid, memberid);
     else
         Clients.Group(rid.ToString()).UserUnMarked(rid, memberid);
     try
     {
         BLL.Member member = new Member();
         member.LoadByPrimaryKey(memberid);
         BLL.MemberLog log = new BLL.MemberLog();
         if (isMarked)
         {
             log.AddNew(BLL.Member.CurrentMemberID, new BLL.Log.MarkRoomMember() { MemberID = memberid, MemberName = member.Name }, memberid, rid);
         }
         else
         {
             log.AddNew(BLL.Member.CurrentMemberID, new BLL.Log.UnMarkRoomMember() { MemberID = memberid, MemberName = member.Name }, memberid, rid);
         }
         RoomMember rm = new RoomMember();
         if (rm.LoadByPrimaryKey(memberid, rid))
         {
             rm.IsMarked = isMarked;
             rm.CanAccessMic = !isMarked;
             rm.Save();
         }
     }
     catch { }
 }
        public int GetQueueOrder(int memberID, int roomID)
        {
            int value = 0;
            RoomMember member = new RoomMember();
            member.LoadByPrimaryKey(memberID, roomID);
            RoomMember order = new RoomMember();
            order.GetMaxQueueOrderByRoomID(roomID);
            if (member.IsColumnNull("QueueOrder"))
            {
                member.QueueOrder = Convert.ToInt32(order.GetColumn("MaxQueueOrder")) + 1;
                value = member.QueueOrder;
            }
            else
                member.SetColumnNull("QueueOrder");

            member.Save();

            return value;
        }
        public void updateRoomMemberSettings(int roomid, int memberid, bool canWrite, bool canAccessMic, bool canAccessCam, string banDays)
        {
            try
            {
                RoomMemberBanning banning = new RoomMemberBanning();
                if (!banning.LoadByPrimaryKey(roomid, memberid))
                {
                    banning.AddNew();
                    banning.RoomID = roomid;
                    banning.MemberID = memberid;
                }
                if (String.IsNullOrEmpty(banDays))
                {
                    banning.MarkAsDeleted();
                    try
                    {
                        if (banning.RowState() != System.Data.DataRowState.Added)
                        {
                            //deleted ban from member
                            BLL.Member member = new Member();
                            member.LoadByPrimaryKey(memberid);
                            BLL.MemberLog log = new BLL.MemberLog();
                            log.AddNew(BLL.Member.CurrentMemberID, new BLL.Log.UnBanRoomMember() { MemberName = member.Name }, member.MemberID, roomid);
                        }
                    }
                    catch { }
                }
                else
                {
                    int days = Convert.ToInt32(banDays);
                    if (days == 0)
                    {
                        banning.SetColumnNull(RoomMemberBanning.ColumnNames.EndDate);
                    }
                    else
                    {
                        banning.EndDate = DateTime.Now.AddDays(days);
                    }

                    try
                    {
                        BLL.Member member = new Member();
                        member.LoadByPrimaryKey(memberid);
                        BLL.MemberLog log = new BLL.MemberLog();
                        BLL.Log.BanRoomMember infoLog = new BLL.Log.BanRoomMember() { MemberName = member.Name };
                        if (days > 0)
                        {
                            infoLog.BanningDays = days;
                            infoLog.EndDate = banning.EndDate;
                        }
                        log.AddNew(BLL.Member.CurrentMemberID, infoLog, member.MemberID, roomid);
                    }
                    catch { }
                }
                banning.Save();
                //room member settings
                RoomMember rm = new RoomMember();
                if (!rm.LoadByPrimaryKey(memberid, roomid))
                {
                    rm.AddNew();
                    rm.RoomID = roomid;
                    rm.MemberID = memberid;
                }
                rm.CanAccessCam = canAccessCam;
                rm.CanAccessMic = canAccessMic;
                rm.CanWrite = canWrite;
                if (!String.IsNullOrEmpty(banDays))
                    rm.InRoom = false;
                rm.Save();
                //update clients
                Clients.Group(roomid.ToString()).updateRoomMemberSettings(roomid, memberid, canWrite, canAccessMic, canAccessCam, banDays);

            }
            catch { }
        }
        public void HandleClose()
        {
            Member user = new Member();
            user.GetMemberByUserId(new Guid(Membership.GetUser().ProviderUserKey.ToString()));
            user.IsOnLine = false;
            user.Status = 4;
            user.Save();

            RoomMember rooms = new RoomMember();
            rooms.GetAllRoomsByMemberID(user.MemberID);
            if (rooms.RowCount > 0)
            {
                rooms.InRoom = false;
                if (rooms.HasCam)
                {
                    rooms.HasCam = false;
                    Room room = new Room();
                    room.LoadByPrimaryKey(rooms.RoomID);
                    room.OpenCams -= 1;
                    if (room.OpenCams < 0)
                        room.OpenCams = 0;
                    room.Save();
                    IHubContext _Rcontext = GlobalHost.ConnectionManager.GetHubContext<ChatRoomHub>();
                    _Rcontext.Clients.Group(rooms.RoomID.ToString()).HideCamLink(rooms.MemberID, rooms.RoomID);
                }
                rooms.Save();

            }

            MemberFriend friends = new MemberFriend();
            friends.GetAllMemberFriends(user.MemberID);
            for (int i = 0; i < friends.RowCount; i++)
            {
                Member temp = new Member();
                temp.LoadByPrimaryKey(friends.FriendID);
                MembershipUser u = Membership.GetUser(temp.UserID);
                IHubContext _Ncontext = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
                _Ncontext.Clients.Group(u.UserName).friendStatusChanged(user.MemberID, user.StatusMsg, "offline");
            }

            // clear all session vars
            Session.Abandon();
        }
 public void userStopCam(int rid, int memberid)
 {
     Clients.Group(rid.ToString(), Context.ConnectionId).HideCamLink(memberid, rid);
     Room room = new Room();
     room.LoadByPrimaryKey(rid);
     if (room.IsColumnNull("OpenCams"))
         room.OpenCams = 0;
     else
         room.OpenCams -= 1;
     if (room.OpenCams < 0)
         room.OpenCams = 0;
     RoomMember roomMember = new RoomMember();
     if (roomMember.LoadByPrimaryKey(memberid, rid))
     {
         roomMember.HasCam = false;
         roomMember.Save();
     }
     room.Save();
 }
        public bool MarkMembers(string rid, bool CanWrite, bool mark)
        {
            Room room = new Room();
            room.LoadByPrimaryKey(Convert.ToInt32(rid));

            RoomMember members = new RoomMember();
            members.GetAllMembersByRoomID(room.RoomID);

            try
            {
                for (int i = 0; i < members.RowCount; i++)
                {
                    members.IsMarked = mark;
                    members.CanWrite = CanWrite;
                    members.Save();

                    Member m = new Member();
                    m.LoadByPrimaryKey(members.MemberID);
                    MembershipUser u = Membership.GetUser(m.UserID);

                    IHubContext _Rcontext = GlobalHost.ConnectionManager.GetHubContext<ChatRoomHub>();
                    if (mark)
                        _Rcontext.Clients.Group(room.RoomID.ToString()).UserMarked(room.RoomID, members.MemberID, CanWrite);
                    else
                        _Rcontext.Clients.Group(room.RoomID.ToString()).UserUnMarked(room.RoomID, members.MemberID, CanWrite);
                    members.MoveNext();
                }
            }
            catch (Exception ex)
            {
                return false;
            }
            return true;
        }
        public void banMemberFromRoom(int memberid, int roomid, int banType, string adminName)
        {
            try
            {
                RoomMember member = new RoomMember();
                member.LoadByPrimaryKey(memberid, roomid);
                member.InRoom = false;
                member.HasCam = false;
                member.HasMic = false;
                member.SetColumnNull(BLL.RoomMember.ColumnNames.QueueOrder);
                member.Save();

                string banTypeName = Helper.StringEnum.GetStringValue(Helper.EnumUtil.ParseEnum<Helper.Enums.BanningType>(banType));
                Clients.Group(roomid.ToString()).banMemberFromRoom(memberid, roomid, banTypeName, adminName);
            }
            catch (Exception ex)
            {
            }
        }
        public bool RateRoom(string rid, string rate)
        {
            MembershipUser user = Membership.GetUser();
            Member member = new Member();

            member.GetMemberByUserId(new Guid(user.ProviderUserKey.ToString()));

            RoomMember Rmember = new RoomMember();
            Rmember.LoadByPrimaryKey(member.MemberID, Convert.ToInt32(rid));

            try
            {
                Rmember.UserRate = Convert.ToInt16(rate);
                Rmember.Save();
            }
            catch (Exception ex)
            {
                return false;
            }
            return true;
        }