Exemplo n.º 1
0
        /// <summary>
        /// Init cusSvrConditionTable for one customer server if inner user is customer server.
        /// </summary>
        public void InitCusSvr(string cusSvrNum)
        {
            BLL.Config.OnlineCusSvrConfig bll        = new BLL.Config.OnlineCusSvrConfig();
            Dictionary <string, int>      configData = bll.GetConfigDataG();

            List <string> cusSvrNumList = application["cusSvrNumList"] as List <string>;
            DataTable     dt            = application["cusSvrConditionTable"] as DataTable;
            var           linqData      = dt.AsEnumerable().Where(c => c.Field <string>("cusSvrNum") == cusSvrNum && c.Field <int>("connLevel") == configData["maxCusSvrConnLevel"]).FirstOrDefault();

            //如果是客服的话,设置客服已经登录
            //if (cusSvrNumList.Contains(cusSvrNum))
            if (linqData != null)
            {
                application.Lock();
                try
                {
                    //init cusSvrConditionTable for one customer server
                    opeTable.InitCusSvrCondTableOne(application, cusSvrNum);
                }
                catch (Exception ex)
                {
                    System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
                    Log.WriteToLog(st.GetFrame(0).ToString(), ex.Message);
                    throw ex;
                    throw ex;
                }
                finally
                {
                    application.UnLock();
                }
            }
        }
Exemplo n.º 2
0
        //添加具有在线客服权限的用户到在线客服datatable中
        public void AddInternalUserToCusSvrDatatable(List <string> workNumList)
        {
            BLL.Config.OnlineCusSvrConfig bll        = new BLL.Config.OnlineCusSvrConfig();
            Dictionary <string, int>      configData = bll.GetConfigDataG();

            try
            {
                application.Lock();

                foreach (string workNum in workNumList)
                {
                    DataTable dt = application["cusSvrConditionTable"] as DataTable;
                    DataRow   dr = dt.NewRow();
                    dr["cusSvrNum"] = workNum;
                    dr["connLevel"] = configData["maxCusSvrConnLevel"];
                    dt.Rows.Add(dr);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                application.UnLock();
            }
        }
Exemplo n.º 3
0
        protected void Application_Start(object sender, EventArgs e)
        {
            //get online customer server config data
            BLL.Config.OnlineCusSvrConfig bll        = new BLL.Config.OnlineCusSvrConfig();
            Dictionary <string, int>      configData = bll.GetConfigDataG();

            BLL.OnlineCusSvr.CusSvrGlobal bllG = new BLL.OnlineCusSvr.CusSvrGlobal();
            List <string> cusSvrNumList        = bllG.GetCusSvrWorkNum();

            CusSvrInit cusSvrInit = new CusSvrInit(configData);

            Application["cusSvrNumList"]        = cusSvrNumList;
            Application["cusSvrConditionTable"] = cusSvrInit.CusSvrConditionTableInit(cusSvrNumList);
            Application["commMaintainTable"]    = cusSvrInit.CommMaintainTableInit();
            Application["chatRecordsTable"]     = cusSvrInit.ChatRecordsTableInit();
            cusSvrAssisterTimer = new Timer(new TimerCallback(cusSvrInit.StartAssisterThreading), Application, 0, configData["levelSeconds"] * 1000);

            //if (configData["cusSvrMode"] == 0)
            //{
            //    CusSvrInitLB cusSvrInit = new CusSvrInitLB(configData);
            //    Application["cusSvrNumList"] = cusSvrNumList;
            //    Application["cusSvrConditionTable"] = cusSvrInit.CusSvrConditionTableInit(cusSvrNumList);
            //    Application["commMaintainTable"] = cusSvrInit.CommMaintainTableInit();
            //    Application["chatRecordsTable"] = cusSvrInit.ChatRecordsTableInit();
            //    cusSvrAssisterTimer = new Timer(new TimerCallback(cusSvrInit.StartAssisterThreading), Application, 0, configData["levelSeconds"] * 1000);
            //}
            //else
            //{
            //    CusSvrInitCM cusSvrInit = new CusSvrInitCM(configData);
            //    Application["cusSvrNumList"] = cusSvrNumList;
            //    Application["cusSvrConditionTable"] = cusSvrInit.CusSvrConditionTableInit(cusSvrNumList);
            //    Application["commMaintainTable"] = cusSvrInit.CommMaintainTableInit();
            //    Application["chatRecordsTable"] = cusSvrInit.ChatRecordsTableInit();
            //    cusSvrAssisterTimer = new Timer(new TimerCallback(cusSvrInit.StartAssisterThreading), Application, 0, configData["levelSeconds"] * 1000);
            //}
        }
Exemplo n.º 4
0
        /// <summary>
        /// 在线客服的辅助线程
        /// 作用:1、去除超过规定时间的用户,更新客服维护表中客服服务客服数
        ///       2、把通信维护表中所有记录的commLevel加1
        ///       2、维护客服状态表,设置断开连接的客服,给connLevel加1
        ///       3、把聊天记录写入数据库,并清空聊天记录
        /// </summary>
        public void StartAssisterThreading(object obj)
        {
            //get online customer server config data
            BLL.Config.OnlineCusSvrConfig bllConfig  = new BLL.Config.OnlineCusSvrConfig();
            Dictionary <string, int>      configData = bllConfig.GetConfigDataG();

            cusSvrMode          = configData["cusSvrMode"];
            cusSvrUserMaxAmount = configData["cusSvrUserMaxAmount"];
            delLeval            = configData["cusSvrUserDelLevel"];
            maxCusSvrConnLevel  = configData["maxCusSvrConnLevel"];

            HttpApplicationState application = obj as HttpApplicationState;

            application.Lock();
            try
            {
                if (cusSvrMode == 0)
                {
                    DataTable dtComm            = application["commMaintainTable"] as DataTable;
                    DataTable dtCusSvrCondition = application["cusSvrConditionTable"] as DataTable;

                    //删除超时用户
                    var linq = from c in dtComm.AsEnumerable()
                               where c.Field <int>("commLevel") == delLeval
                               select c;
                    foreach (DataRow dr in linq)
                    {
                        var drTemp = dtCusSvrCondition.AsEnumerable().Where(c => c.Field <string>("cusSvrNum") == dr["cusSvrNum"]).First();
                        drTemp["userAmount"] = Convert.ToInt32(drTemp["userAmount"]) - 1;

                        dr.Delete();
                    }
                    //确认删除
                    dtComm.AcceptChanges();

                    foreach (DataRow dr in dtComm.Rows)
                    {
                        dr["commLevel"] = Convert.ToInt32(dr["commLevel"]) + 1;
                    }

                    //维护客服状态表
                    //客服是否已经下线或者断开
                    foreach (DataRow dr in dtCusSvrCondition.Rows)
                    {
                        if (Convert.ToInt32(dr["connLevel"]) == maxCusSvrConnLevel)
                        {
                            dr["userAmount"] = cusSvrUserMaxAmount;
                            continue;
                        }

                        dr["connLevel"] = Convert.ToInt32(dr["connLevel"]) + 1;
                    }

                    //把聊天记录写入数据库
                    DataTable dtChatRecords          = application["chatRecordsTable"] as DataTable;
                    BLL.OnlineCusSvr.ChatRecords bll = new BLL.OnlineCusSvr.ChatRecords();
                    bll.SaveChatRecords(dtChatRecords);
                }
                else
                {
                    DataTable dtComm            = application["commMaintainTable"] as DataTable;
                    DataTable dtCusSvrCondition = application["cusSvrConditionTable"] as DataTable;

                    //删除超时用户
                    var linq = from c in dtComm.AsEnumerable()
                               where c.Field <int>("commLevel") == delLeval
                               select c;
                    foreach (DataRow dr in linq)
                    {
                        var drTemp = dtCusSvrCondition.AsEnumerable().Where(c => c.Field <string>("cusSvrNum") == dr["cusSvrNum"]).First();

                        dr.Delete();
                    }
                    //确认删除
                    dtComm.AcceptChanges();

                    foreach (DataRow dr in dtComm.Rows)
                    {
                        dr["commLevel"] = Convert.ToInt32(dr["commLevel"]) + 1;
                    }

                    //维护客服状态表
                    //客服是否已经下线或者断开
                    foreach (DataRow dr in dtCusSvrCondition.Rows)
                    {
                        if (Convert.ToInt32(dr["connLevel"]) == maxCusSvrConnLevel)
                        {
                            continue;
                        }

                        dr["connLevel"] = Convert.ToInt32(dr["connLevel"]) + 1;
                    }

                    //把聊天记录写入数据库
                    DataTable dtChatRecords          = application["chatRecordsTable"] as DataTable;
                    BLL.OnlineCusSvr.ChatRecords bll = new BLL.OnlineCusSvr.ChatRecords();
                    bll.SaveChatRecords(dtChatRecords);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                application.UnLock();
            }
        }