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(); } }
/// <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; }
/// <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(""); }
/// <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(""); }
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(); }
/// <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); }
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); } }
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(); }