Exemple #1
0
        /// <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);
            }
        }
Exemple #2
0
    /// <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);
    }
Exemple #3
0
    /// <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));
    }
Exemple #4
0
    /// <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));
        }
    }
Exemple #5
0
 /// <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));
 }
Exemple #6
0
    /// <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));
        }
    }
Exemple #7
0
    /// <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;
    }
Exemple #8
0
 void ChatService_OperatorChatRequest(object sender, OperatorChatRequestEventArgs e)
 {
     throw new NotImplementedException();
 }
Exemple #9
0
        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);
            }
        }
Exemple #10
0
 void ChatService_OperatorChatRequest(object sender, OperatorChatRequestEventArgs e)
 {
     throw new NotImplementedException();
 }