示例#1
0
        public void TestRequestChat()
        {
            MyVisitSessionServiceProvider provider = new MyVisitSessionServiceProvider();

            VisitSessionService.Provider = provider;
            MyChatProvider pp = new MyChatProvider();

            ChatService.Provider = pp;
            VisitSession v = new VisitSession();

            v.SessionId = "aaaaa";
            VisitSessionService.NewSession(v);
            Chat ch = new Chat();

            ch.AccountId  = "2";
            ch.ChatId     = "mfdsa";
            ch.CreateTime = DateTime.Now;
            ch.Status     = LiveSupport.LiveSupportModel.ChatStatus.Requested;
            ch.VisitorId  = "bbb";
            //  VisitSessionService.RequestChat(ch);
            Assert.AreEqual(0, ChatService.chats.Count);
            //Chat ch1 = new Chat();
            //ch.AccountId = "2";
            //ch1.ChatId = "aaaaa";
            //ch.VisitorId = "bbb";
            //VisitSessionService.RequestChat(ch1);
            //Assert.AreEqual(1, ChatService.chats.Count);
        }
示例#2
0
    /// <summary>
    /// 客服接受访客对话请求
    /// </summary>
    /// <param name="operatorId"></param>
    /// <param name="chatId"></param>
    /// <returns></returns>
    public static int AcceptChatRequest(string operatorId, string chatId)
    {
        Trace.WriteLine(string.Format("ChatService.AcceptChatRequest(OperatorId={0},ChatId={1})", operatorId, chatId));

        Chat chat = GetChatById(chatId);

        if (chat == null)
        {
            Trace.WriteLine(string.Format("Error: AcceptChatRequest(OperatorId={0},ChatId={1}) error, can't find this chat", operatorId, chatId));
            return(AcceptChatRequestReturn_Error_Others);
        }

        if (chat.Status == ChatStatus.Accepted)
        {
            return(AcceptChatRequestReturn_Error_AcceptedByOthers);
        }
        else if (chat.Status == ChatStatus.Requested)
        {
            chat.Status     = ChatStatus.Accepted;
            chat.OperatorId = operatorId;
            chat.AcceptTime = DateTime.Now;

            if (VisitorChatRequestAccepted != null)
            {
                VisitorChatRequestAccepted(null, new VisitorChatRequestAcceptedEventArgs(new VisitorChatRequestEventArgs(chat.VisitorId, chat)));
            }
            Message m1 = new Message();
            m1.ChatId   = chat.ChatId;
            m1.SentDate = DateTime.Now;
            m1.Type     = MessageType.SystemMessage_ToVisitor;
            m1.Text     = string.Format("客服:{0}已经接受您的对话请求", OperatorService.GetOperatorById(operatorId).NickName);
            SendMessage(m1);

            Message m2 = new Message();
            m2.ChatId   = chat.ChatId;
            m2.SentDate = DateTime.Now;
            m2.Type     = MessageType.SystemMessage_ToOperator;
            m2.Text     = string.Format("你已经接受访客{0}的对话请求", VisitorService.GetVisitorById(chat.VisitorId).Name);
            SendMessage(m2);

            OperatorService.SetOperatorStatus(operatorId, OperatorStatus.Chatting);

            VisitSession s = VisitSessionService.GetSessionById(VisitorService.GetVisitorById(chat.VisitorId).CurrentSessionId);
            s.OperatorId  = operatorId;
            s.Status      = VisitSessionStatus.Chatting;
            s.ChatingTime = DateTime.Now;

            return(AcceptChatRequestReturn_OK);
        }
        else if (chat.Status == ChatStatus.Closed)
        {
            return(AcceptChatRequestReturn_Error_ChatRequestCanceled);
        }
        else
        {
            Trace.WriteLine(string.Format("ChatService.AccpetChatRequest({0},{1}) error,status illegal: ChatStatus={2}", operatorId, chatId, chat.Status));
            return(AcceptChatRequestReturn_Error_Others);
        }
    }
示例#3
0
    /// <summary>
    /// 关闭对话信息
    /// </summary>
    /// <param name="chatId"></param>
    /// <param name="userName"></param>
    public static bool CloseChat(string chatId, string closeBy)
    {
        Trace.WriteLine(string.Format("ChatService.CloseChat(ChatId = {0},CloseBy={1})", chatId, closeBy));
        Chat chat = GetChatById(chatId);

        if (chat == null)
        {
            Trace.WriteLine("Waring: ChatService.CloseChat() error ,ChatId " + chatId + " not found");
            return(false);
        }

        if (chat.Status == ChatStatus.Closed)
        {
            Trace.WriteLine("Waring: ChatService.CloseChat() is closed aleady ,ChatId " + chatId);
            try
            {
                Directory.Delete(ChatTempDataDir + chatId, true);
            }
            catch (Exception)
            {
            }
            return(true);
        }

        if (ChatStatusChanged != null)
        {
            ChatStatusChanged(null, new ChatStatusChangedEventArgs(chatId, ChatStatus.Closed));
        }

        Message m = new Message();

        m.ChatId   = chatId;
        m.SentDate = DateTime.Now;
        m.Type     = MessageType.SystemMessage_ToBoth;
        m.Text     = string.Format("{0}已关闭对话", closeBy);
        SendMessage(m);

        chat.Status    = ChatStatus.Closed;
        chat.CloseTime = DateTime.Now;
        chat.CloseBy   = closeBy;
        if (chat.OperatorId == null || chat.OperatorId == "")
        {
            chat.OperatorId = null;
        }
        Provider.CloseChat(chat);

        VisitSessionService.SetSessionStatus(VisitorService.GetVisitorById(chat.VisitorId).CurrentSessionId, VisitSessionStatus.Visiting);
        // 注意: IsOperatorHasActiveChat需要在更改chat status后调用
        if (!string.IsNullOrEmpty(chat.OperatorId) && !IsOperatorHasActiveChat(chat.OperatorId) && OperatorService.IsOperatorOnline(chat.OperatorId))
        {
            OperatorService.SetOperatorStatus(chat.OperatorId, OperatorStatus.Idle);//关闭时改变客服状态
        }
        return(true);
    }
示例#4
0
    public List <PageRequest> GetHistoryPageRequests(string visitorId, DateTime begin, DateTime end)
    {
        checkAuthentication();
        List <VisitSession> li   = VisitSessionService.GetHistoryVisitSessionByVisitorId(visitorId);
        List <PageRequest>  list = new List <PageRequest>();

        foreach (VisitSession m in li)
        {
            list.AddRange(PageRequestService.GetHistoryPageRequests(m.SessionId, begin, end));
        }
        return(list);
    }
示例#5
0
        public void TestNewSessionMaxNum()
        {
            MyVisitSessionServiceProvider provider = new MyVisitSessionServiceProvider();

            VisitSessionService.Provider = provider;
            for (int i = 0; i < 210; i++)
            {
                VisitSession s = new VisitSession();
                s.Status = VisitSessionStatus.Leave;
                VisitSessionService.NewSession(s);
            }

            Assert.AreEqual(200, VisitSessionService.Sessions.Count);
        }
示例#6
0
        public void TestNewSession()
        {
            MyVisitSessionServiceProvider provider = new MyVisitSessionServiceProvider();
            VisitSession v = new VisitSession();

            VisitSessionService.Provider = provider;
            VisitSessionService.NewSession(v);
            Assert.AreEqual(1, provider.Sessions.Count);
            VisitSession vv = new VisitSession();

            vv.SessionId = v.SessionId;
            VisitSessionService.NewSession(vv);
            Assert.AreEqual(1, provider.Sessions.Count);
        }
示例#7
0
    /// <summary>
    /// 页面请求对话
    /// </summary>
    /// <param name="CurrentVisitor"></param>
    /// <returns>ChatId</returns>
    public static string ChatPageRequestChat(Visitor visitor)
    {
        Trace.WriteLine(string.Format("ChatService.ChatPageRequestChat(Visitor = {0})", visitor));
        if (!string.IsNullOrEmpty(visitor.Name))
        {
            Visitor vs = VisitorService.GetVisitorById(visitor.VisitorId);
            vs.Name = visitor.Name;
            VisitorService.UpdateVisitor(vs);
        }
        Chat chatRequest = new Chat();

        chatRequest.AccountId  = visitor.AccountId;
        chatRequest.CreateTime = DateTime.Now;
        chatRequest.Status     = ChatStatus.Requested;
        chatRequest.VisitorId  = visitor.VisitorId;

        chats.Add(chatRequest);
        Provider.AddChat(chatRequest);

        VisitSession s = VisitSessionService.GetSessionById(visitor.CurrentSessionId);

        s.ChatRequestTime = DateTime.Now;
        s.Status          = VisitSessionStatus.ChatRequesting;

        Message m = new Message();

        m.ChatId      = chatRequest.ChatId;
        m.Text        = "正在接入客服,请稍等...";
        m.Type        = MessageType.SystemMessage_ToVisitor;
        m.Source      = "系统";
        m.Destination = "访客";
        SendMessage(m, DateTime.Now.AddMilliseconds(100));

        if (VisitorChatRequest != null)
        {
            VisitorChatRequestEventArgs req = new VisitorChatRequestEventArgs(visitor.VisitorId, chatRequest);
            visitorChatRequests.Add(req);
            VisitorChatRequest(null, req);
        }

        return(chatRequest.ChatId);
    }
示例#8
0
        public void TestGetSessionById()
        {
            MyVisitSessionServiceProvider provider = new MyVisitSessionServiceProvider();

            VisitSessionService.Provider = provider;
            VisitSession v = new VisitSession();

            v.SessionId = "aaaaa";
            VisitSessionService.NewSession(v);
            Assert.AreEqual(v, VisitSessionService.GetSessionById(v.SessionId));
            Assert.AreEqual(1, VisitSessionService.Sessions.Count);
            for (int i = 0; i < 20; i++)
            {
                VisitSession vv = new VisitSession();
                vv.SessionId = "aaaaa";
                VisitSessionService.NewSession(vv);
            }

            Assert.AreEqual(1, VisitSessionService.Sessions.Count);
        }
示例#9
0
        public void TestInvite()
        {
            LiveSupport.LiveSupportDAL.SqlProviders.DBHelper.ConnectionString = "Server=rd01;Database=LiveSupport;User ID=sa;Password=;Trusted_Connection=False;";
            OperatorService.Provider = new MyOperatorProvider();
            Account a = TestTool.CreateNewAccount();

            AccountService.AddAccount(a);
            Operator o = TestTool.CreateNewOperator(a.AccountId);

            OperatorService.NewOperator(o);
            Visitor v = TestTool.CreateNewVisitor(a.AccountId);

            VisitorService.NewVisitor(v);
            VisitSessionService.NewSession(v.CurrentSession);

            Operator op = OperatorService.Login(a.LoginName, a.LoginName, a.Password);

            ChatService.OperatorRequestChat(op.OperatorId, v.VisitorId);

            Assert.AreEqual(v.CurrentSession.SessionId, ChatService.GetOperatorInvitation(v.VisitorId));
        }
示例#10
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));
    }
示例#11
0
    public static NewChangesCheckResult CheckNewChanges(string operatorId, string operatorSessionId, NewChangesCheck check)
    {
        Trace.WriteLine(string.Format("OperatorService.CheckNewChanges(operatorId = {0},NewChangesCheck={1})", operatorId, check.ToString()));
        Operator op = OperatorService.GetOperatorById(operatorId);

        op.HeartBeatTime = DateTime.Now;//设置心跳时间
        NewChangesCheckResult checkResult = new NewChangesCheckResult();

        if (op.OperatorSession != operatorSessionId)
        {
            checkResult.ReturnCode = NewChangesCheckResult.ReturnCodeEnum.ReturnCode_SessionInvalid;
            return(checkResult);
        }

        // 新访客
        checkResult.NewVisitors = VisitorService.GetNewVisitors(op.AccountId, check.NewVisitorLastCheckTime);

        checkResult.Chats = ChatService.GetAllChatByAccountId(op.AccountId);

        // 访问会话状态更新
        checkResult.VisitSessionChange = VisitSessionService.GetVisitSessionChange(op.AccountId, check.NewVisitorLastCheckTime);

        // 消息更新
        //List<VisitSession> visitSessions = VisitSessionService.GetActiveSessionsByOperatorId(Authentication.OperatorId);
        checkResult.Messages = new List <MessageCheckResult>();
        foreach (MessageCheck item in check.ChatSessionChecks)
        {
            MessageCheckResult mcr = new MessageCheckResult();
            mcr.ChatId   = item.ChatId;
            mcr.Messages = MessageService.GetMessagesForOperator(item.ChatId, item.LastCheckTime);
            checkResult.Messages.Add(mcr);
        }
        checkResult.Operators  = OperatorService.GetAllOperatorsByAccountId(op.AccountId);
        checkResult.ReturnCode = NewChangesCheckResult.ReturnCodeEnum.ReturnCode_Success;
        // 客服状态更新
        Trace.WriteLine(string.Format("ChecknewChanges(OperatorId={0},NewChangesCheck={{1}},NewChangesCheckResult={{2}}", operatorId, check.ToString(), checkResult.ToString()));
        return(checkResult);
    }
示例#12
0
    //开始对话
    protected void btnStarChat_Click(object sender, EventArgs e)
    {
        string chatId = CurrentVisitor.CurrentSessionId;

        if (CurrentChat == null || CurrentChat.Status == ChatStatus.Closed)
        {
            if (!string.IsNullOrEmpty(txtName.Text) && CurrentVisitor.Name == VisitSessionService.GetSessionById(CurrentVisitor.CurrentSessionId).IP)
            {
                CurrentVisitor.Name = txtName.Text;
            }
            if (!string.IsNullOrEmpty(txtEmail.Text) && !string.IsNullOrEmpty(CurrentVisitor.Email))
            {
                CurrentVisitor.Email = txtEmail.Text;
            }
            VisitorName = CurrentVisitor.Name;
            VName       = CurrentVisitor.Name;
            chatId      = ChatService.ChatPageRequestChat(CurrentVisitor);
            setCookie(chatId);
        }

        pnlChat.Visible    = true;
        pnlRequest.Visible = false;
    }