コード例 #1
0
ファイル: ChatService.cs プロジェクト: uwitec/ideacode
    /// <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);
    }