public static void Execute(SocketP2PEntity client, SocketP2PMessageEntity message, List <SocketP2PEntity> Clients, List <SocketP2PEntity> Queue, SendToClientCompleteHandler SendToClientCompleteHandler, OutPutSystemMessageHandler OutPutSystemMessageHandler) { IIdentity id = null; switch (message.Identity.ToUpper()) { case "CUSTOMER": id = new CustomerIdentity(); break; case "SERVANT": id = new ServantIdentity(); break; } id.Comunicate(client, message, Clients, Queue, SendToClientCompleteHandler, OutPutSystemMessageHandler); }
private static void AutoCutLine() { while (true) { try { var clients = from x in Clients where x.Identity == "CUSTOMER" && x.LastTalkTime != null && (DateTime.Now - (x.LastTalkTime ?? DateTime.Now)).TotalSeconds > (60 * 3) && !(from z in Queue where z.Sender == x.Sender select z).Any() select x; foreach (var client in clients) { // 通知客服 var servant = Clients.Where(x => x.Sender == client.Receiver).FirstOrDefault(); if (servant != null) { try { SocketP2PMessageEntity message = new SocketP2PMessageEntity(); message.Sender = null; message.Receiver = servant.Sender; message.Identity = "SERVER"; message.Data = string.Format("访客({0})超过3分钟未发言,系统自动断线,请等待其他访客的服务请求", servant.Receiver); message.Owner = servant.Owner; message.WeiXinNo = servant.WeiXinNo; message.OpenId = servant.OpenId; servant.Receiver = null; ServantIdentity identity = new ServantIdentity(); identity.Comunicate(servant, message, Clients, Queue, SendToClientComplete, OutPutSystemMessage); } catch (SocketException ex) { servant.Socket.Close(); Clients.Remove(servant); OutPutSystemMessage(ex.Message); } } Thread.Sleep(500); // 通知访客 try { SocketP2PMessageEntity message = new SocketP2PMessageEntity(); message.Sender = null; message.Receiver = client.Sender; message.Identity = "SERVER"; message.Data = "您有3分钟未发言,自动为您退出"; message.Owner = client.Owner; message.WeiXinNo = client.WeiXinNo; message.OpenId = client.OpenId; CustomerIdentity identity = new CustomerIdentity(); identity.Comunicate(client, message, Clients, Queue, SendToClientComplete, OutPutSystemMessage); } catch (SocketException ex) { OutPutSystemMessage(ex.Message); } finally { client.Socket.Close(); Clients.Remove(client); } } } catch { } Thread.Sleep(500); } }