/// <summary> /// 客脑主动邀请 to-all /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void ChatService_OperatorChatRequest(object sender, OperatorChatRequestEventArgs e)//wang-ok { Operator op = OperatorService.GetOperatorById(e.OperatorId); foreach (var item in GetOnlineOperatorSockets(op.AccountId)) { sh.SendPacket(item, e); } }
/// <summary> /// 客服主动邀请对话 /// </summary> /// <param name="operatorId">客服ID</param> /// <param name="visitorId"></param> public static Chat OperatorRequestChat(string operatorId, string visitorId) { Trace.WriteLine(string.Format("ChatService.OperatorRequestChat(OperatorId = {0},VisitorId = {1})", operatorId, visitorId)); Visitor visitor = VisitorService.GetVisitorById(visitorId); Operator op = OperatorService.GetOperatorById(operatorId); if (visitor == null || op == null) { Trace.WriteLine(string.Format("Error: ChatService.OperatorRequestChat({0},{1}) error Opertor or Visitor is null", operatorId, visitorId)); return(null); } Chat chat = new Chat(); chat.IsInviteByOperator = true; chat.CreateBy = op.NickName; chat.CreateTime = DateTime.Now; chat.LastCheckTime = DateTime.Now.Ticks; chat.AccountId = op.AccountId; chat.VisitorId = visitorId; chat.OperatorId = operatorId; chats.Add(chat); Provider.AddChat(chat); op.Status = OperatorStatus.InviteChat;//将客服改为请求中 chat.Status = ChatStatus.Requested; //VisitSessionService.SetSessionStatus(visitor.CurrentSessionId, VisitSessionStatus.ChatRequesting); if (OperatorChatRequest != null) { var req = new OperatorChatRequestEventArgs(operatorId, visitorId, chat); OperatorChatRequest(null, req); } Message m = new Message(); m.ChatId = chat.ChatId; m.Text = "正在邀请访客,请稍等..."; m.Type = MessageType.SystemMessage_ToOperator; SendMessage(m, DateTime.Now.AddMilliseconds(50)); return(chat); }
/// <summary> /// 接受客服邀请 /// </summary> /// <param name="chatId"></param> public static void AcceptOperatorInvitation(string chatId) { Trace.WriteLine(string.Format("ChatService.AcceptOperatorInvitation(ChatId = {0})", chatId)); Chat chat = GetChatById(chatId); if (chat != null) { chat.Status = ChatStatus.Accepted; if (chat.OperatorId != null) { OperatorService.GetOperatorById(chat.OperatorId).Status = OperatorStatus.Chatting; } VisitSession s = VisitSessionService.GetSessionById(VisitorService.GetVisitorById(chat.VisitorId).CurrentSessionId); s.Status = VisitSessionStatus.Chatting; //将访客状态改为对话中 s.ChatingTime = DateTime.Now; OperatorChatRequestEventArgs opq = new OperatorChatRequestEventArgs(chat.OperatorId, chat.VisitorId, chat); //tao OperatorChatRequestAccepted(null, new OperatorChatRequestAcceptedEventArgs(opq)); //tao } //SendMessage(new Message(chat.ChatId, "访客已接受对话邀请!", MessageType.SystemMessage_ToOperator)); SendMessage(new Message(chat.ChatId, "您已接受对话邀请!", MessageType.SystemMessage_ToVisitor)); }
/// <summary> /// 拒绝客服会话邀请 /// </summary> /// <param name="chatId"></param> public static void DeclineOperatorInvitation(string chatId) { Trace.WriteLine(string.Format("ChatService.DeclineOperatorInvitation(ChatId = {0})", chatId)); Chat chat = GetChatById(chatId); if (chat != null) { chat.Status = ChatStatus.Decline; //SendMessage(new Message(chat.ChatId, "访客已拒绝对话邀请!", MessageType.SystemMessage_ToOperator)); OperatorChatRequestEventArgs opq = new OperatorChatRequestEventArgs(chat.OperatorId, chat.VisitorId, chat); //tao OperatorChatRequestDeclined(null, new OperatorChatRequestDeclinedEventArgs(opq)); //tao if (!string.IsNullOrEmpty(chat.OperatorId) && !IsOperatorHasActiveChat(chat.OperatorId)) { OperatorService.SetOperatorStatus(chat.OperatorId, OperatorStatus.Idle, false);//关闭时改变客服状态 } } else { Trace.WriteLine(string.Format("Error: ChatService.DeclineOperatorInvitation({0} error, can't find Chat", chatId)); } }
/// <summary> /// 接受客服邀请 /// </summary> /// <param name="chatId"></param> public static void AcceptOperatorInvitation(string chatId) { Trace.WriteLine(string.Format("ChatService.AcceptOperatorInvitation(ChatId = {0})", chatId)); Chat chat = GetChatById(chatId); if (chat != null) { chat.Status = ChatStatus.Accepted; if (chat.OperatorId != null) { OperatorService.GetOperatorById(chat.OperatorId).Status = OperatorStatus.Chatting; } VisitSession s = VisitSessionService.GetSessionById(VisitorService.GetVisitorById(chat.VisitorId).CurrentSessionId); s.Status = VisitSessionStatus.Chatting;//将访客状态改为对话中 s.ChatingTime = DateTime.Now; OperatorChatRequestEventArgs opq = new OperatorChatRequestEventArgs(chat.OperatorId,chat.VisitorId,chat);//tao OperatorChatRequestAccepted(null,new OperatorChatRequestAcceptedEventArgs(opq)); //tao } //SendMessage(new Message(chat.ChatId, "访客已接受对话邀请!", MessageType.SystemMessage_ToOperator)); SendMessage(new Message(chat.ChatId, "您已接受对话邀请!", MessageType.SystemMessage_ToVisitor)); }
/// <summary> /// 拒绝客服会话邀请 /// </summary> /// <param name="chatId"></param> public static void DeclineOperatorInvitation(string chatId) { Trace.WriteLine(string.Format("ChatService.DeclineOperatorInvitation(ChatId = {0})",chatId)); Chat chat = GetChatById(chatId); if (chat != null) { chat.Status = ChatStatus.Decline; //SendMessage(new Message(chat.ChatId, "访客已拒绝对话邀请!", MessageType.SystemMessage_ToOperator)); OperatorChatRequestEventArgs opq = new OperatorChatRequestEventArgs(chat.OperatorId, chat.VisitorId, chat);//tao OperatorChatRequestDeclined(null, new OperatorChatRequestDeclinedEventArgs(opq));//tao if (!string.IsNullOrEmpty(chat.OperatorId) && !IsOperatorHasActiveChat(chat.OperatorId)) { OperatorService.SetOperatorStatus(chat.OperatorId, OperatorStatus.Idle, false);//关闭时改变客服状态 } } else { Trace.WriteLine(string.Format("Error: ChatService.DeclineOperatorInvitation({0} error, can't find Chat",chatId)); } }
/// <summary> /// 客服主动邀请对话 /// </summary> /// <param name="operatorId">客服ID</param> /// <param name="visitorId"></param> public static Chat OperatorRequestChat(string operatorId, string visitorId) { Trace.WriteLine(string.Format("ChatService.OperatorRequestChat(OperatorId = {0},VisitorId = {1})", operatorId, visitorId)); Visitor visitor = VisitorService.GetVisitorById(visitorId); Operator op = OperatorService.GetOperatorById(operatorId); if (visitor == null || op == null) { Trace.WriteLine(string.Format("Error: ChatService.OperatorRequestChat({0},{1}) error Opertor or Visitor is null",operatorId,visitorId)); return null; } Chat chat = new Chat(); chat.IsInviteByOperator = true; chat.CreateBy = op.NickName; chat.CreateTime = DateTime.Now; chat.LastCheckTime = DateTime.Now.Ticks; chat.AccountId = op.AccountId; chat.VisitorId = visitorId; chat.OperatorId = operatorId; chats.Add(chat); Provider.AddChat(chat); op.Status = OperatorStatus.InviteChat;//将客服改为请求中 chat.Status = ChatStatus.Requested; //VisitSessionService.SetSessionStatus(visitor.CurrentSessionId, VisitSessionStatus.ChatRequesting); if (OperatorChatRequest != null) { var req = new OperatorChatRequestEventArgs(operatorId, visitorId, chat); OperatorChatRequest(null, req); } Message m = new Message(); m.ChatId =chat.ChatId; m.Text = "正在邀请访客,请稍等..."; m.Type = MessageType.SystemMessage_ToOperator; SendMessage(m, DateTime.Now.AddMilliseconds(50)); return chat; }
void ChatService_OperatorChatRequest(object sender, OperatorChatRequestEventArgs e) { throw new NotImplementedException(); }
void processServerEvents(DataArriveEventArgs e) { // 客服状态改变 if (e.Data.GetType() == typeof(OperatorForceLogoffEventArgs)) { if (OperatorForceLogoff != null) { OperatorForceLogoff(this, null); } } else if (e.Data.GetType() == typeof(OperatorStatusChangeEventArgs)) { OperatorStatusChangeEventArgs os = (OperatorStatusChangeEventArgs)e.Data; Operator op = GetOperatorById(os.OperatorId); if (op != null) { op.Status = os.Status; OperatorStatusChanged(this, os); } } //访客对话请求 else if (e.Data.GetType() == typeof(VisitorChatRequestEventArgs)) { VisitorChatRequestEventArgs vc = (VisitorChatRequestEventArgs)e.Data; Visitor v = GetVisitorById(vc.VisitorId); if (v != null) { v.CurrentSession.Status = VisitSessionStatus.ChatRequesting; VisitorSessionChange(this, new VisitorSessionChangeEventArgs(v.CurrentSession)); VisitorChatRequest(this, vc); addChat(vc.Chat); } } //客服对话邀请 else if (e.Data.GetType() == typeof(OperatorChatRequestEventArgs)) { OperatorChatRequestEventArgs ocr = (OperatorChatRequestEventArgs)e.Data; Operator op = GetOperatorById(ocr.OperatorId); Visitor v = GetVisitorById(ocr.VisitorId); if (op != null && v != null) { op.Status = OperatorStatus.InviteChat; addChat(ocr.Chat); //v.CurrentSession.Status = VisitSessionStatus. //OperatorChatRequest(this, ocr); OperatorStatusChanged(this, new OperatorStatusChangeEventArgs(op.OperatorId, OperatorStatus.InviteChat)); } } // 访客对话请求被接受 else if (e.Data.GetType() == typeof(VisitorChatRequestAcceptedEventArgs)) { VisitorChatRequestAcceptedEventArgs v = e.Data as VisitorChatRequestAcceptedEventArgs; Chat chat = GetChatByChatId(v.VisitorChatRequest.Chat.ChatId); Operator op = GetOperatorById(v.VisitorChatRequest.Chat.OperatorId); Visitor visitor = GetVisitorById(v.VisitorChatRequest.VisitorId); if (chat != null && op != null && visitor != null) { chat.OperatorId = v.VisitorChatRequest.Chat.OperatorId; op.Status = OperatorStatus.Chatting; visitor.CurrentSession.OperatorId = op.OperatorId; VisitSession vs = visitor.CurrentSession; vs.ChatingTime = v.VisitorChatRequest.Chat.AcceptTime; vs.Status = VisitSessionStatus.Chatting; //VisitorChatRequestAccepted(this, (VisitorChatRequestAcceptedEventArgs)e.Data); OperatorStatusChanged(this, new OperatorStatusChangeEventArgs(v.VisitorChatRequest.Chat.OperatorId, OperatorStatus.Chatting)); VisitorSessionChange(this, new VisitorSessionChangeEventArgs(vs)); } } // 客服对话邀请被接受 else if (e.Data.GetType() == typeof(OperatorChatRequestAcceptedEventArgs)) { OperatorChatRequestAcceptedEventArgs ocr = (OperatorChatRequestAcceptedEventArgs)e.Data; Operator op = GetOperatorById(ocr.ChatRequest.OperatorId); Visitor v = GetVisitorById(ocr.ChatRequest.VisitorId); if (op != null && v != null) { op.Status = OperatorStatus.Chatting; v.CurrentSession.Status = VisitSessionStatus.Chatting; if (OperatorChatRequestAccepted != null) { OperatorChatRequestAccepted(this, (OperatorChatRequestAcceptedEventArgs)e.Data); } VisitorSessionChange(this, new VisitorSessionChangeEventArgs(v.CurrentSession)); OperatorStatusChanged(this, new OperatorStatusChangeEventArgs(op.OperatorId, op.Status)); } } // 客服对话邀请被拒绝 else if (e.Data.GetType() == typeof(OperatorChatRequestDeclinedEventArgs)) { OperatorChatRequestDeclinedEventArgs ocr = (OperatorChatRequestDeclinedEventArgs)e.Data; Operator op = GetOperatorById(ocr.ChatRequest.OperatorId); Visitor v = GetVisitorById(ocr.ChatRequest.VisitorId); Chat c = GetChatByChatId(ocr.ChatRequest.Chat.ChatId); if (op != null && v != null && c != null) { c.Status = ChatStatus.Decline; if (!IsOperatorHasActiveChat(op.OperatorId)) { op.Status = OperatorStatus.Idle; OperatorStatusChanged(this, new OperatorStatusChangeEventArgs(op.OperatorId, OperatorStatus.Idle)); } v.CurrentSession.Status = VisitSessionStatus.Visiting; VisitorSessionChange(this, new VisitorSessionChangeEventArgs(v.CurrentSession)); if (OperatorChatRequestDeclined != null) { OperatorChatRequestDeclined(this, (OperatorChatRequestDeclinedEventArgs)e.Data); } } } // 新的对话 else if (e.Data.GetType() == typeof(NewChatEventArgs)) { NewChat(this, (NewChatEventArgs)e.Data); } // 对话状态改变 else if (e.Data.GetType() == typeof(ChatStatusChangedEventArgs)) { ChatStatusChangedEventArgs cs = (ChatStatusChangedEventArgs)e.Data; Chat chat = GetChatByChatId(cs.ChatId); if (chat == null) { return; } Visitor v = GetVisitorById(chat.VisitorId); if (v == null) { return; } chat.Status = cs.Status; Operator o = GetOperatorById(chat.OperatorId); if (chat.Status == ChatStatus.Accepted) { v.CurrentSession.Status = VisitSessionStatus.Chatting; VisitorSessionChange(this, new VisitorSessionChangeEventArgs(v.CurrentSession)); o.Status = OperatorStatus.Chatting; OperatorStatusChanged(this, new OperatorStatusChangeEventArgs(chat.OperatorId, OperatorStatus.Chatting)); } else if (chat.Status == ChatStatus.Closed) { v.CurrentSession.Status = VisitSessionStatus.Visiting; VisitorSessionChange(this, new VisitorSessionChangeEventArgs(v.CurrentSession)); if (o != null && !IsOperatorHasActiveChat(chat.OperatorId)) { o.Status = OperatorStatus.Idle; OperatorStatusChanged(this, new OperatorStatusChangeEventArgs(chat.OperatorId, OperatorStatus.Idle)); } } if (ChatStatusChanged != null) { ChatStatusChanged(this, cs); } } else if (e.Data.GetType() == typeof(OperatorChatJoinInviteEventArgs)) { ChatJoinInvite(this, (OperatorChatJoinInviteEventArgs)e.Data); } else if (e.Data.GetType() == typeof(OperatorChatJoinInviteAcceptedEventArgs)) { ChatJoinInviteAccepted(this, (OperatorChatJoinInviteAcceptedEventArgs)e.Data); } else if (e.Data.GetType() == typeof(OperatorChatJoinInviteDeclinedEventArgs)) { ChatJoinInviteDeclined(this, (OperatorChatJoinInviteDeclinedEventArgs)e.Data); } // 新消息 else if (e.Data.GetType() == typeof(ChatMessageEventArgs) && NewMessage != null) { NewMessage(this, (ChatMessageEventArgs)e.Data); } // 新访问,访客可能已经存在 else if (e.Data.GetType() == typeof(NewVisitingEventArgs) && NewVisiting != null) { NewVisitingEventArgs nv = (NewVisitingEventArgs)e.Data; nv.Visitor.CurrentSession = nv.Session; Visitor v = GetVisitorById(nv.Visitor.VisitorId); if (v != null) { v.CurrentSession = nv.Session; VisitorSessionChange(this, new VisitorSessionChangeEventArgs(v.CurrentSession)); } else { addVisitor(nv.Visitor); NewVisiting(this, (NewVisitingEventArgs)e.Data); } } // 访客离开 else if (e.Data.GetType() == typeof(VisitorLeaveEventArgs)) { VisitorLeaveEventArgs vl = e.Data as VisitorLeaveEventArgs; Visitor v = GetVisitorById(vl.VisitorId); if (v != null) { v.CurrentSession.Status = VisitSessionStatus.Leave; VisitorSessionChange(this, new VisitorSessionChangeEventArgs(v.CurrentSession)); } //VisitorLeave(this, (VisitorLeaveEventArgs)e.Data); } }
void ChatService_OperatorChatRequest(object sender, OperatorChatRequestEventArgs e) { throw new NotImplementedException(); }