コード例 #1
0
    protected void Page_Load(object sender, EventArgs e)
    {
        //销毁命令
        if (Request["destory"] != null)
        {
            KFWindow window = Cache.Remove(Request["id"]) as KFWindow;
            window.DumpData();
            return;
        }

        //创建一个新的窗口
        if (Request["msg"] == null)
        {
            Name = KFClientBuilder.Current.Build(this);
        }
        else
        {   //发送客服消息
            Message message = new Message();

            message.DateTime    = DateTime.Now;
            message.Content     = Request["msg"];
            message.MessageType = MessageType.KF;
            message.HaveRead    = false;

            bool b = (Cache[Request["id"]] as KFWindow).AddMessage(message);
            Response.Write(b);
            Response.End();
        }
    }
コード例 #2
0
    /// <summary>
    /// 获取客服窗口名称
    /// </summary>
    /// <param name="page"></param>
    /// <returns></returns>
    private KFWindow GetKFClient(System.Web.UI.Page page)
    {
        int onLineNum = 0;
        int idleNum = 0;
        for (int i = 0; i < MAX_KF_NUMBER; i++)
        {
            string key = (i + 1).ToString().PadLeft(3, '0');
            if (page.Cache[key] != null)
            {
                onLineNum++;
                if ((page.Cache[key] as KFWindow).CurrentUserID == null)
                {
                    idleNum++;
                    return page.Cache[key] as KFWindow;
                }
            }
        }

        string message = string.Empty;
        if (idleNum == 0)
            message = "十分抱歉,现在客服人员都在繁忙工作中,请稍后再试";
        if (onLineNum == 0)
        {
            //message = "十分抱歉,现在没有客服人员在线,请留言";
            KFWindow window = new KFWindow(page.Session.SessionID);
            page.Cache.Insert(window.Name, window, null, Cache.NoAbsoluteExpiration, new TimeSpan(12, 0, 0), CacheItemPriority.Normal, null);
            return window;
        }

        page.Response.Write(message);
        page.Response.End();
        return null;
    }
コード例 #3
0
    /// <summary>
    /// 创建一个客服窗口,返回窗口名称ID
    /// </summary>
    /// <param name="page"></param>
    /// <returns></returns>
    public string Build(System.Web.UI.Page page)
    {
        string kfName = GetClientName(page);

        if (string.IsNullOrEmpty(kfName) == false)
        {
            KFWindow kfWindow = new KFWindow(kfName);
            page.Cache.Insert(kfName, kfWindow, null, Cache.NoAbsoluteExpiration, new TimeSpan(12, 0, 0), CacheItemPriority.Normal, null);
            return(kfName);
        }
        return("");
    }
コード例 #4
0
 /// <summary>
 /// 获取可用客服窗口,返回客服窗口ID
 /// </summary>
 /// <param name="page"></param>
 /// <returns></returns>
 public string Build(System.Web.UI.Page page)
 {
     //只能有一个线程获取窗口操作
     lock (this)
     {
         KFWindow window = GetKFClient(page);
         if (window != null)
         {
             window.CurrentUserID = "chatting";
             return(window.Name);
         }
     }
     return("");
 }
コード例 #5
0
ファイル: ct.aspx.cs プロジェクト: lyroge/lyroge.framework
    protected void Page_Load(object sender, EventArgs e)
    {
        string   kfname   = Request["id"];
        KFWindow kfWindow = this.Cache[kfname] as KFWindow;

        //客服已经不在线
        if (kfWindow == null)
        {
            Response.Write(KF_OFF_LINE);
            Response.End();
            return;
        }

        Stopwatch watch = new Stopwatch();

        watch.Start();

        while (true)
        {
            //过期则返回
            if (watch.ElapsedMilliseconds / 1000 > EXPIRED_SECONDS)
            {
                //过期将客服窗口销毁,返回过期提示
                Response.Write(EXPIRED);
                watch.Stop();
                break;
            }

            string msg = kfWindow.GetKfMessage();
            //未获取到消息
            if (string.IsNullOrEmpty(msg))
            {
                Thread.Sleep(50);
                continue;
            }
            //获取到消息则输出
            else
            {
                Response.Write(msg);
                break;
            }
        }
        Response.End();
    }
コード例 #6
0
    /// <summary>
    /// 获取客服窗口名称
    /// </summary>
    /// <param name="page"></param>
    /// <returns></returns>
    private KFWindow GetKFClient(System.Web.UI.Page page)
    {
        int onLineNum = 0;
        int idleNum   = 0;

        for (int i = 0; i < MAX_KF_NUMBER; i++)
        {
            string key = (i + 1).ToString().PadLeft(3, '0');
            if (page.Cache[key] != null)
            {
                onLineNum++;
                if ((page.Cache[key] as KFWindow).CurrentUserID == null)
                {
                    idleNum++;
                    return(page.Cache[key] as KFWindow);
                }
            }
        }

        string message = string.Empty;

        if (idleNum == 0)
        {
            message = "十分抱歉,现在客服人员都在繁忙工作中,请稍后再试";
        }
        if (onLineNum == 0)
        {
            //message = "十分抱歉,现在没有客服人员在线,请留言";
            KFWindow window = new KFWindow(page.Session.SessionID);
            page.Cache.Insert(window.Name, window, null, Cache.NoAbsoluteExpiration, new TimeSpan(12, 0, 0), CacheItemPriority.Normal, null);
            return(window);
        }

        page.Response.Write(message);
        page.Response.End();
        return(null);
    }
コード例 #7
0
    protected void Page_Load(object sender, EventArgs e)
    {
        //销毁命令
        if (Request["destory"] != null)
        {
            KFWindow window = (Cache[Request["id"]] as KFWindow);
            window.DumpData();
            window.CurrentUserID = null;
            return;
        }

        //创建一个新的窗口
        if (Request["msg"] == null)
        {
            Name = ChatClientBuilder.Current.Build(this);
            int kfid;
            CanChat = int.TryParse(Name, out kfid);
            if (CanChat == false)
            {
                Title = "暂时没有客服在线,请留言";
            }
            else
            {
                Title = "与客服" + Name + "交谈中";
            }
        }
        else
        {   //发送客服消息
            Message message = new Message();
            message.DateTime    = DateTime.Now;
            message.Content     = Request["msg"];
            message.MessageType = MessageType.User;
            message.HaveRead    = false;
            (Cache[Request["id"]] as KFWindow).AddMessage(message);
        }
    }
コード例 #8
0
ファイル: kf.aspx.cs プロジェクト: lyroge/lyroge.framework
    protected void Page_Load(object sender, EventArgs e)
    {
        string   kfname   = Request["id"];
        KFWindow kfWindow = this.Cache[kfname] as KFWindow;

        #region 没有创建好窗口时继续检测
        if (kfWindow == null)
        {
            Response.Write("");
            Response.End();
            return;
        }
        #endregion

        Stopwatch watch = new Stopwatch();
        watch.Start();

        while (true)
        {
            #region 过期则返回
            if (watch.ElapsedMilliseconds / 1000 > EXPIRED_SECONDS)
            {
                watch.Stop();
                Response.Write(EXPIRED);
                break;
            }
            #endregion

            //有用户连接时
            if (string.IsNullOrEmpty(kfWindow.CurrentUserID) == false)
            {
                //发出有用户来了的消息
                if (kfWindow.HaveUser == false)
                {
                    kfWindow.HaveUser = true;
                    Response.Write(HAVE_USER);
                    break;
                }
                string msg = kfWindow.GetUserMessage();
                //没有消息
                if (string.IsNullOrEmpty(msg))
                {
                    Thread.Sleep(50);
                    continue;
                }
                else
                {
                    //有消息产生
                    Response.Write(msg);
                    break;
                }
            }
            //没有用户在线
            else
            {
                //发出用户下线的消息
                if (kfWindow.HaveUser == true)
                {
                    kfWindow.HaveUser = false;
                    Response.Write(NO_USER);
                    break;
                }
                else
                {
                    continue;
                }
            }
        }
        Response.End();
    }