Exemplo n.º 1
0
        public bool Invoke(IMessage obj)
        {
            EventSessionInfo sessionInfo = obj as EventSessionInfo;
            bool             br          = false;

            if (sessionInfo == null)
            {
                return(false);
            }
            try
            {
                PartyLeftInfo partyLeftInfo =
                    sessionInfo.ChatTranscript.ChatEventList.GetAsPartyLeftInfo(
                        sessionInfo.ChatTranscript.ChatEventList.Count - 1);

                if (partyLeftInfo != null)
                {
                    br = true;
                }
            }
            catch (Exception ex)
            {
                ChatLog.GetInstance().LogException(ex);
            }
            return(br);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 添加消息到聊天室消息集合
        /// </summary>
        /// <param name="item"></param>
        protected void AddMessage(object item, string StartAt)
        {
            if (item == null)
            {
                return;
            }
            ChatMessage msg = new ChatMessage();

            msg.ReceiverID  = this.UserID;
            msg.MessageType = MessageType.Alert;
            msg.CreateData  = DateTime.Now;
            msg.UserID      = "system";
            msg.NickName    = "系统";

            #region switch message type
            ChatParty party = null;

            string typeName = item.GetType().Name;
            switch (typeName)
            {
            case "MessageInfoData":         // 消息事件
                MessageInfo chatInfo = (MessageInfo)item;
                msg.TimeShift = chatInfo.TimeShift;
                if (chatInfo.MessageText != null)
                {
                    msg.Message = chatInfo.MessageText.Text;
                }
                msg.UserID = chatInfo.UserId;
                party      = this.Room.Partys.Find(user => user.UserID == msg.UserID);
                if (party != null)
                {
                    msg.NickName = party.DisplayName;
                    if (party.UserType == UserType.Agent)
                    {
                        msg.MessageType = MessageType.AgentMessage;
                    }
                    else if (party.UserType == UserType.Client)
                    {
                        msg.MessageType = MessageType.ClientMessage;
                    }
                    MessageFilter(party, msg);
                }
                break;

            case "NewPartyInfoData":        // 新聊天事件
                NewPartyInfo joinInfo = (NewPartyInfo)item;
                msg.TimeShift = joinInfo.TimeShift;
                if (joinInfo.MessageText != null)
                {
                    msg.Message = joinInfo.MessageText.Text;
                }
                this.InitRoom();
                this.AddParty(joinInfo);
                break;
            //case "NoticeInfoData":      // 通知事件 8.0以前版本不支持通知
            //    NoticeInfo noticeInfo = (NoticeInfo)item;
            //    msg.Message = noticeInfo.NoticeText.Text;
            //    msg.MessageType = MessageType.Notice;

            //    break;
            case "PartyLeftInfoData":       // 离开事件
                PartyLeftInfo leftInfo = (PartyLeftInfo)item;
                msg.TimeShift = leftInfo.TimeShift;
                if (leftInfo.MessageText != null)
                {
                    msg.Message = leftInfo.MessageText.Text;
                }
                party = this.Room.GetUser(leftInfo.UserId);

                PartyLeftFilter(msg, party);
                this.RemoveParty(leftInfo.UserId);
                break;
            }
            #endregion

            if (!string.IsNullOrEmpty(StartAt))
            {
                msg.StartAt = DateTime.Parse(StartAt).AddSeconds(msg.TimeShift);
            }

            AfterReceivedMessage(typeName, msg);
        }