public string LastMessageID(string conversationName)
        {
            int limit = 1000;
            int i     = 0;

            if (conversationName.Equals("#monkeys.paywall.bot/$*T;905"))
            {
                i = 0;
            }

            ChatMessageCollection messages = this._skype.Messages;

            foreach (ChatMessage cm in messages)
            {
                if (cm.ChatName.Equals(conversationName))
                {
                    return(cm.Id.ToString());
                }
                if (i > limit)
                {
                    return(string.Empty);
                }
                i++;
            }
            return(string.Empty);
        }
Example #2
0
        public override ChatMessageCollection SendMessage(int userID, int targetUserID, string content, string ip, bool getNewMessages, int lastMessageID)
        {
            ChatMessageCollection messages = new ChatMessageCollection();

            using (SqlQuery query = new SqlQuery())
            {
                query.CommandText = "bx_Chat_SendMessage";
                query.CommandType = CommandType.StoredProcedure;

                query.CreateParameter <int>("@UserID", userID, SqlDbType.Int);
                query.CreateParameter <int>("@TargetUserID", targetUserID, SqlDbType.Int);
                query.CreateParameter <string>("@Content", content, SqlDbType.NVarChar, 3000);
                query.CreateParameter <string>("@CreateIP", ip, SqlDbType.VarChar, 50);

                query.CreateParameter <bool>("@GetNewMessages", getNewMessages, SqlDbType.Bit);
                query.CreateParameter <int>("@LastMessageID", lastMessageID, SqlDbType.Int);

                if (getNewMessages)
                {
                    using (XSqlDataReader reader = query.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            messages.Insert(0, new ChatMessage(reader));
                        }
                    }
                }
                else
                {
                    query.ExecuteNonQuery();
                }
            }

            return(messages);
        }
Example #3
0
        public override ChatMessageCollection GetLastChatMessages(int userID, int targetUserID, int lastMessageID, int MessageCount)
        {
            ChatMessageCollection result;

            using (SqlQuery query = new SqlQuery())
            {
                query.CommandText = "bx_Chat_GetLastMessages";
                query.CommandType = CommandType.StoredProcedure;

                query.CreateParameter <int>("@UserID", userID, SqlDbType.Int);
                query.CreateParameter <int>("@TargetUserID", targetUserID, SqlDbType.Int);
                query.CreateParameter <int>("@LastMessageID", lastMessageID, SqlDbType.Int);

                using (XSqlDataReader reader = query.ExecuteReader())
                {
                    result = new ChatMessageCollection();

                    while (reader.Read())
                    {
                        result.Insert(0, new ChatMessage(reader));
                    }
                }

                return(result);
            }
        }
        public List <SkypeMessage> GetLastMessages(int count)
        {
            int limit = count;
            int i     = 0;
            List <SkypeMessage> result = new List <SkypeMessage>();

            ChatMessageCollection messages = this._skype.Messages;

            foreach (ChatMessage cm in messages)
            {
                if (i > limit)
                {
                    return(result);
                }

                result.Add(new SkypeMessage()
                {
                    ChatMessage = cm,
                    Message     = cm.Body,
                    Sender      = cm.Sender.FullName,
                    Date        = cm.Timestamp
                });

                i++;
            }
            return(result);
        }
Example #5
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!EnableChatFunction)
            {
                ShowError("管理员已关闭对话功能!");
                return;
            }

            //验证码频率计数(页面调用次数计数)
            ValidateCodeManager.CreateValidateCodeActionRecode(validateActionName);

            m_ToUserID = _Request.Get <int>("to", Method.Get, 0);

            if (m_ToUserID <= 0)
            {
                ShowError(new UserNotExistsError("to", m_ToUserID));
            }

            m_ChatUser = UserBO.Instance.GetSimpleUser(m_ToUserID, true);

            if (m_ChatUser == null)
            {
                ShowError(new UserNotExistsError("to", m_ToUserID));
            }

            m_ChatMessageList = ChatBO.Instance.GetLastChatMessages(MyUserID, m_ToUserID, 0, 20);
        }
Example #6
0
        public override ChatMessageCollection GetLastChatMessages(int userID, int targetUserID, int lastMessageID, int MessageCount)
        {
            ChatMessageCollection result;
            using (SqlQuery query = new SqlQuery())
            {
                query.CommandText = "bx_Chat_GetLastMessages";
                query.CommandType = CommandType.StoredProcedure;

                query.CreateParameter<int>("@UserID", userID, SqlDbType.Int);
                query.CreateParameter<int>("@TargetUserID", targetUserID, SqlDbType.Int);
                query.CreateParameter<int>("@LastMessageID", lastMessageID, SqlDbType.Int);

                using (XSqlDataReader reader = query.ExecuteReader())
                {
                    result = new ChatMessageCollection();

                    while (reader.Read())
                    {
                        result.Insert(0, new ChatMessage(reader));
                    }
                }

                return result;
            }
        }
Example #7
0
        protected void Page_Load(object sender, System.EventArgs e)
        {
            AddNavigationItem("对话");

            if (!EnableChatFunction)
            {
                ShowError("管理员已关闭对话功能!");
                return;
            }

            m_PageNumber = _Request.Get<int>("page", Method.All, 0);
            m_MessagePageNumber = _Request.Get<int>("msgpage", Method.All, 0);
            m_TargetUserID = _Request.Get<int>("to", Method.All, 0);

            if (m_TargetUserID > 0)
            {
                m_SelectedChatSession = ChatBO.Instance.GetChatSession(MyUserID, m_TargetUserID);

                if (m_SelectedChatSession == null)
                    m_TargetUserID = 0;

                else
                    WaitForFillSimpleUser<ChatSession>(m_SelectedChatSession, 0);

                bool updateIsReade = false;
                if (m_MessagePageNumber == 1)
                    updateIsReade = true;

                m_ChatMessageList = ChatBO.Instance.GetChatMessages(MyUserID, m_TargetUserID, m_MessagePageNumber, c_MessagePageSize, updateIsReade);

                m_ChatMessageList.Reverse();

                int totalPageNumber = (int)Math.Ceiling((double)m_ChatMessageList.TotalRecords / (double)c_MessagePageSize);
                if (m_MessagePageNumber == 0)
                {
                    m_MessagePageNumber = totalPageNumber;
                }
                else
                {
                    m_MessagePageNumber = (totalPageNumber + 1) - m_MessagePageNumber;
                }

                WaitForFillSimpleUsers<ChatMessage>(m_ChatMessageList, 0);

                SetPager("messagelist", BbsRouter.GetUrl("my/chat", "page=" + m_PageNumber + "&to=" + TargetUserID + "&msgpage={0}"), m_MessagePageNumber, c_MessagePageSize, m_ChatMessageList.TotalRecords);
            }

            if (_Request.IsClick("beginChat"))
            {
                ProcessBeginChat();
            }

            m_ChatSessionList = ChatBO.Instance.GetChatSessions(MyUserID, m_PageNumber, c_SessionPageSize);
            WaitForFillSimpleUsers<ChatSession>(m_ChatSessionList, 0);

            SetPager("chatlist", BbsRouter.GetUrl("my/chat", "page={0}"), m_PageNumber, c_SessionPageSize, m_ChatSessionList.TotalRecords);
        }
        public string LastMessageID()
        {
            ChatMessageCollection messages = this._skype.Messages;

            foreach (ChatMessage cm in messages)
            {
                return(cm.Id.ToString());
            }
            return(string.Empty);
        }
Example #9
0
        public override ChatMessageCollection GetChatMessages(int userID, int targetUserID, int pageNumber, int pageSize, bool updateIsReaded)
        {
            ChatMessageCollection result;

            using (SqlQuery query = new SqlQuery())
            {
                if (pageNumber != 0)
                {
                    query.Pager.BeforeExecuteDealcre.Add("@TotalMessages", SqlDbType.Int);
                    query.Pager.BeforeExecute        = @"SELECT @TotalMessages = TotalMessages FROM bx_ChatSessions WHERE UserID = @UserID AND TargetUserID = @TargetUserID;";
                    query.Pager.TableName            = "bx_ChatMessages";
                    query.Pager.SortField            = "MessageID";
                    query.Pager.PageNumber           = pageNumber;
                    query.Pager.PageSize             = pageSize;
                    query.Pager.IsDesc               = true;
                    query.Pager.SelectCount          = true;
                    query.Pager.TotalRecordsVariable = "@TotalMessages";
                    query.Pager.Condition            = "UserID = @UserID AND TargetUserID = @TargetUserID";

                    query.CreateParameter <int>("@UserID", userID, SqlDbType.Int);
                    query.CreateParameter <int>("@TargetUserID", targetUserID, SqlDbType.Int);

                    if (updateIsReaded)
                    {
                        query.Pager.AfterExecute = @"
     UPDATE bx_ChatMessages SET IsRead = 1 WHERE UserID = @UserID AND TargetUserID = @TargetUserID AND IsRead = 0;
                    ";
                    }
                }
                else
                {
                    query.CommandText  = "SELECT Top " + pageSize + " * FROM bx_ChatMessages WHERE UserID = @UserID AND TargetUserID = @TargetUserID ORDER BY MessageID Desc;";
                    query.CommandText += "SELECT COUNT(*) FROM bx_ChatMessages WHERE UserID = @UserID AND TargetUserID = @TargetUserID;";
                    query.CreateParameter <int>("@UserID", userID, SqlDbType.Int);
                    query.CreateParameter <int>("@TargetUserID", targetUserID, SqlDbType.Int);
                }

                using (XSqlDataReader reader = query.ExecuteReader())
                {
                    result = new ChatMessageCollection(reader);

                    if (reader.NextResult())
                    {
                        if (reader.Read())
                        {
                            result.TotalRecords = reader.Get <int>(0);
                        }
                    }
                }

                return(result);
            }
        }
Example #10
0
        public void ProcessKeyword(ChatMessage chatMessage, ProcessKeywordMode mode)
        {
            if (chatMessage == null)
            {
                return;
            }

            ChatMessageCollection messages = new ChatMessageCollection();

            messages.Add(chatMessage);

            ProcessKeyword(messages, mode);
        }
Example #11
0
        public ChatMessageCollection GetLastChatMessages(int userID, int targetUserID, int lastMessageID, int messageCount)
        {
            if (!AllSettings.Current.ChatSettings.EnableChatFunction)
            {
                return(new ChatMessageCollection());
            }

            messageCount = messageCount <= 0 ? 200 : messageCount;

#if !Passport
            PassportClientConfig settings = Globals.PassportClient;
            if (settings.EnablePassport)
            {
                ChatMessageProxy[] messages = settings.PassportService.Chat_GetLastChatMessages(userID, targetUserID, lastMessageID, messageCount);


                ChatMessageCollection result = new ChatMessageCollection();
                foreach (ChatMessageProxy m in messages)
                {
                    result.Add(GetChatMessage(m));
                }

                return(result);
            }
            else
#endif
            {
                ChatMessageCollection messages = ChatDao.Instance.GetLastChatMessages(userID, targetUserID, lastMessageID, messageCount);
                ProcessKeyword(messages, ProcessKeywordMode.TryUpdateKeyword);

                if (messages.Count > 0)
                {
                    if (OnUsersMessageCountChanged != null)
                    {
                        AuthUser user = UserBO.Instance.GetAuthUser(userID);
                        if (user != null)
                        {
                            Dictionary <int, int> counts = new Dictionary <int, int>();
                            counts.Add(userID, user.UnreadMessages);
                            OnUsersMessageCountChanged(counts);
                        }
                    }
                }
                return(messages);
            }

            //if (OnChatUserMessageCountChanged != null) OnChatUserMessageCountChanged(userID);
        }
Example #12
0
        public WebSocketHandler(HttpContext context, WebSocket webSocket)
        {
            Context   = context;
            WebSocket = webSocket;
            Id        = Guid.NewGuid();

            Sockets.TryAdd(Id, this);

            Database.SortedSetRangeByRankAsync("Messages", -10, -1).ContinueWith <Task>(task =>
            {
                var messages = new ChatMessageCollection(task.Result.Select(value => JsonConvert.DeserializeObject <ChatMessage>(value)).ToDictionary(m => m.Timestamp.Ticks));
                var wrapper  = new WebWrapper {
                    Payload = messages
                };
                return(Send(wrapper));
            });
        }
Example #13
0
        public List <ChatMessageProxy> Chat_GetLastChatMessages(int userID, int targetUserID, int lastMessageID, int messageCount)
        {
            if (!CheckClient())
            {
                return(null);
            }

            ChatMessageCollection messages = ChatBO.Instance.GetLastChatMessages(userID, targetUserID, lastMessageID, messageCount);

            List <ChatMessageProxy> result = new List <ChatMessageProxy>();

            foreach (ChatMessage m in messages)
            {
                result.Add(ProxyConverter.GetChatMessageProxy(m));
            }

            return(result);
        }
Example #14
0
        public List <ChatMessageProxy> Chat_AdminGetChatMessages(int userID, int targetUserID, int pageNumber, int pageSize)
        {
            if (!CheckClient())
            {
                return(null);
            }


            ChatMessageCollection messages = ChatBO.Instance.AdminGetChatMessages(userID, targetUserID, pageNumber, pageSize);

            List <ChatMessageProxy> result = new List <ChatMessageProxy>();

            foreach (ChatMessage m in messages)
            {
                result.Add(ProxyConverter.GetChatMessageProxy(m));
            }

            return(result);
        }
Example #15
0
        public APIResult Chat_SendMessage(int senderUserID, int recoverUserID, string contentWithoutEncode, string ip, bool getNewMessages, int lastMessageID, out List <ChatMessageProxy> chatMessages)
        {
            chatMessages = null;
            if (CheckClient())
            {
                APIResult result = new APIResult();
                using (ErrorScope es = new ErrorScope())
                {
                    try
                    {
                        ChatMessageCollection messages = ChatBO.Instance.Server_SendMessage(senderUserID, recoverUserID, contentWithoutEncode, ip, getNewMessages, lastMessageID);

                        chatMessages = new List <ChatMessageProxy>();
                        foreach (ChatMessage message in messages)
                        {
                            chatMessages.Add(ProxyConverter.GetChatMessageProxy(message));
                        }

                        bool hasError = false;
                        es.CatchError <ErrorInfo>(delegate(ErrorInfo error)
                        {
                            hasError = true;
                            result.AddError(error.TatgetName, error.Message);
                        });

                        result.IsSuccess = hasError == false;
                    }
                    catch (Exception ex)
                    {
                        result.ErrorCode = Consts.ExceptionCode;
                        result.AddError(ex.Message);
                        result.IsSuccess = false;
                    }
                }

                return(result);
            }
            else
            {
                return(null);
            }
        }
Example #16
0
        public List <ChatMessageProxy> Chat_GetChatMessages(int userID, int targetUserID, int pageNumber, int pageSize, bool processKeyword, bool updateIsReaded, out int totalCount)
        {
            totalCount = 0;
            if (!CheckClient())
            {
                return(null);
            }

            ChatMessageCollection messages = ChatBO.Instance.GetChatMessages(userID, targetUserID, pageNumber, pageSize, updateIsReaded);

            totalCount = messages.TotalRecords;

            List <ChatMessageProxy> result = new List <ChatMessageProxy>();

            foreach (ChatMessage m in messages)
            {
                result.Add(ProxyConverter.GetChatMessageProxy(m));
            }

            return(result);
        }
        public List <SkypeMessage> GetMessages(string messageID, string conversationName)
        {
            int limit = 150;
            int i     = 0;
            List <SkypeMessage> result = new List <SkypeMessage>();

            ChatMessageCollection messages = this._skype.Messages;

            foreach (ChatMessage cm in messages)
            {
                //if (!cm.FromDisplayName.Equals(conversationName))
                //  continue;
                if (!cm.ChatName.Equals(conversationName))
                {
                    continue;
                }
                if (cm.Id <= Int32.Parse(messageID))
                {
                    return(result);
                }
                if (i > limit)
                {
                    return(result);
                }

                if (!cm.Sender.Handle.Equals(this._currentUser))
                {
                    result.Add(new SkypeMessage()
                    {
                        ChatMessage = cm,
                        Message     = cm.Body,
                        Sender      = cm.Sender.FullName,
                        Date        = cm.Timestamp
                    });
                }

                i++;
            }
            return(result);
        }
Example #18
0
        private static IEnumerable <ChatMessage> GetUnreadMessages(ISkype skype)
        {
            ChatMessageCollection messages = null;

            foreach (var name in Names)
            {
                messages = skype.Messages[name];
            }
            foreach (string chatName in ChatNames)
            {
                var chatMessages = skype.Chat[chatName].Messages;
                if (messages == null)
                {
                    break;
                }
                foreach (ChatMessage chatMessage in chatMessages)
                {
                    messages.Add(chatMessage);
                }
            }

            var unreaded = messages?.OfType <ChatMessage>().Where(o => (int)o.Status == 2);

            return(unreaded);

            //            foreach (Chat chat in skype.Chats)
            //            {
            //                if (chat.ActiveMembers.Count > 2)
            //                {
            //                    Console.WriteLine(chat.Name);
            //                    foreach (User activeMember in chat.ActiveMembers)
            //                    {
            //                        Console.WriteLine(activeMember.FullName);
            //                    }
            //                    Console.WriteLine(chat.ActiveMembers.Count);
            //                }
            //            }
        }
Example #19
0
        public void ProcessKeyword(ChatMessageCollection messages, ProcessKeywordMode mode)
        {
            if (messages.Count == 0)
            {
                return;
            }

            KeywordReplaceRegulation keyword = AllSettings.Current.ContentKeywordSettings.ReplaceKeywords;

            bool needProcess = false;

            //更新关键字模式,只在必要的情况下才取恢复信息并处理
            if (mode == ProcessKeywordMode.TryUpdateKeyword)
            {
                needProcess = keyword.NeedUpdate <ChatMessage>(messages);
            }
            //填充原始内容模式,始终都要取恢复信息,但不处理
            else
            {
                needProcess = true;
            }

            if (needProcess)
            {
                RevertableCollection <ChatMessage> messagesWithReverter = ChatDao.Instance.GetChatMessageWithReverters(messages.GetKeys());

                if (messagesWithReverter != null)
                {
                    if (keyword.Update(messagesWithReverter))
                    {
                        ChatDao.Instance.UpdateChatMessageKeywords(messagesWithReverter);
                    }

                    //将新数据填充到旧的列表
                    messagesWithReverter.FillTo(messages);
                }
            }
        }
Example #20
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!EnableChatFunction)
            {
                ShowError("管理员已关闭对话功能!");
                return;
            }

            //验证码频率计数(页面调用次数计数)
            ValidateCodeManager.CreateValidateCodeActionRecode(validateActionName);

            m_ToUserID = _Request.Get<int>("to", Method.Get, 0);

            if (m_ToUserID <= 0)
                ShowError(new UserNotExistsError("to", m_ToUserID));

            m_ChatUser = UserBO.Instance.GetSimpleUser(m_ToUserID,true);

            if (m_ChatUser == null)
                ShowError(new UserNotExistsError("to", m_ToUserID));

            m_ChatMessageList = ChatBO.Instance.GetLastChatMessages(MyUserID, m_ToUserID, 0, 20);
        }
Example #21
0
        /// <summary>
        /// 获取和某人的聊天记录,如果pageNumber为0则取最后一页
        /// </summary>
        /// <param name="operatorID"></param>
        /// <param name="targetUserID"></param>
        /// <param name="pageNumber">0表示取最后一页</param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        private ChatMessageCollection GetChatMessages(int operatorID, int targetUserID, int pageNumber, int pageSize, bool processKeyword, bool updateIsReaded)
        {
            if (!AllSettings.Current.ChatSettings.EnableChatFunction)
            {
                return(new ChatMessageCollection());
            }

            if (operatorID <= 0)
            {
                ThrowError(new NotLoginError());
                return(new ChatMessageCollection());
            }

            if (targetUserID <= 0)
            {
                return(new ChatMessageCollection());
            }

#if !Passport
            PassportClientConfig settings = Globals.PassportClient;
            if (settings.EnablePassport)
            {
                int totalCount;
                ChatMessageProxy[] messages = settings.PassportService.Chat_GetChatMessages(operatorID, targetUserID, pageNumber, pageSize, processKeyword, updateIsReaded, out totalCount);

                ChatMessageCollection result = new ChatMessageCollection();
                foreach (ChatMessageProxy m in messages)
                {
                    result.Add(GetChatMessage(m));
                }
                result.TotalRecords = totalCount;
                return(result);
            }
            else
#endif
            {
                ChatMessageCollection Messages = ChatDao.Instance.GetChatMessages(operatorID, targetUserID, pageNumber, pageSize, updateIsReaded);

                if (updateIsReaded)
                {
                    if (OnUsersMessageCountChanged != null)
                    {
                        AuthUser user = UserBO.Instance.GetAuthUser(operatorID);
                        if (user != null)
                        {
                            Dictionary <int, int> counts = new Dictionary <int, int>();
                            counts.Add(operatorID, user.UnreadMessages);
                            OnUsersMessageCountChanged(counts);
                        }
                    }
                }

                if (processKeyword)
                {
                    ProcessKeyword(Messages, ProcessKeywordMode.TryUpdateKeyword);
                }
                else
                {
                    ProcessKeyword(Messages, ProcessKeywordMode.FillOriginalText);
                }

                return(Messages);
            }
        }
Example #22
0
        /// <summary>
        /// 发送一个对话消息,并且根据指定参数决定是否需要同时返回最新消息
        /// </summary>
        /// <param name="operatorID">发送者</param>
        /// <param name="targetUserID">接受者</param>
        /// <param name="contentWithoutEncode">未经html编码的内容</param>
        /// <param name="ip">发送者IP</param>
        /// <param name="processContent">是否处理内容</param>
        /// <param name="getNewMessages">是否需要同时返回最新消息</param>
        /// <param name="lastMessageID">如果需要返回最新消息,则传入客户端</param>
        /// <returns></returns>
        public ChatMessageCollection SendMessage(int operatorID, int targetUserID, string contentWithoutEncode, string ip, bool processContent, bool getNewMessages, int lastMessageID)
        {
#if !Passport
            PassportClientConfig settings = Globals.PassportClient;
            if (settings.EnablePassport)
            {
                ChatMessageProxy[] chatMessages;
                APIResult          result  = null;
                string             content = ProcessChatContent(operatorID, contentWithoutEncode);
                content = content.Replace("{$root}", Globals.FullAppRoot);

                try
                {
                    result = settings.PassportService.Chat_SendMessage(operatorID, targetUserID, content, ip, getNewMessages, lastMessageID, out chatMessages);
                }
                catch (Exception ex)
                {
                    ThrowError(new APIError(ex.Message));
                    return(new ChatMessageCollection());
                }

                if (result.ErrorCode == Consts.ExceptionCode)
                {
                    if (result.Messages.Length > 0)
                    {
                        ThrowError(new CustomError("远程服务器错误, 请稍后重试." + (result.Messages.Length > 0 ? result.Messages[0] : string.Empty)));
                    }
                    return(new ChatMessageCollection());
                }
                else if (result.IsSuccess == false)
                {
                    ThrowError <CustomError>(new CustomError("", result.Messages[0]));
                    return(new ChatMessageCollection());
                }

                ChatMessageCollection messages = new ChatMessageCollection();
                foreach (ChatMessageProxy m in chatMessages)
                {
                    messages.Add(GetChatMessage(m));
                }
                return(messages);
            }
            else
#endif
            {
                if (!AllSettings.Current.ChatSettings.EnableChatFunction)
                {
                    return(new ChatMessageCollection());
                }

                if (operatorID <= 0)
                {
                    ThrowError(new NotLoginError());
                    return(new ChatMessageCollection());
                }

                if (targetUserID <= 0)
                {
                    ThrowError(new UserNotExistsError("targetUserID", targetUserID));
                    return(new ChatMessageCollection());
                }

                if (operatorID == targetUserID)
                {
                    ThrowError(new CustomError("targetUserID", "您不能和自己交谈"));  //临时的
                    return(new ChatMessageCollection());
                }

                if (string.IsNullOrEmpty(contentWithoutEncode) || (contentWithoutEncode = contentWithoutEncode.Trim()) == string.Empty)
                {
                    ThrowError(new EmptyMessageContentError("contentWithoutEncode"));
                    return(new ChatMessageCollection());
                }

                if (contentWithoutEncode.Length > MaxContentLength)
                {
                    ThrowError(new MessageContentLengthError("contentWithoutEncode", contentWithoutEncode, MaxContentLength));
                    return(new ChatMessageCollection());
                }

                if (FriendBO.Instance.InMyBlacklist(targetUserID, operatorID))
                {
                    ThrowError(new InBlackListError());
                    return(new ChatMessageCollection());
                }



                //if (AllSettings.Current.UserPermissionSet.Can(operatorID, UserPermissionSet.Action.UseMessage) == false)
                //{
                //    ThrowError(new NoPermissionUseMessageError());
                //    return false;
                //}
                string content = contentWithoutEncode;
                if (processContent)
                {
                    content = ProcessChatContent(operatorID, content);
                }

                ContentKeywordSettings keywords = AllSettings.Current.ContentKeywordSettings;

                string keyword = null;

                if (keywords.BannedKeywords.IsMatch(content, out keyword))
                {
                    ThrowError(new ChatMessageBannedKeywordsError("content", keyword));
                    return(null);
                }
                ChatMessageCollection newMessages = ChatDao.Instance.SendMessage(operatorID, targetUserID, content, ip, getNewMessages, lastMessageID);

                AuthUser user = UserBO.Instance.GetUserFromCache <AuthUser>(targetUserID);
                if (user != null)
                {
                    user.UnreadMessages++;
                }
                if (OnUsersMessageCountChanged != null)
                {
                    if (user == null)
                    {
                        user = UserBO.Instance.GetAuthUser(targetUserID);
                    }
                    if (user != null)
                    {
                        Dictionary <int, int> counts = new Dictionary <int, int>();
                        counts.Add(user.UserID, user.UnreadMessages);

                        OnUsersMessageCountChanged(counts);
                    }
                }

                ProcessKeyword(newMessages, ProcessKeywordMode.TryUpdateKeyword);

                return(newMessages);
            }
        }
Example #23
0
        public override ChatMessageCollection SendMessage(int userID, int targetUserID, string content, string ip, bool getNewMessages, int lastMessageID)
        {
            ChatMessageCollection messages = new ChatMessageCollection();

            using (SqlQuery query = new SqlQuery())
            {
                query.CommandText = "bx_Chat_SendMessage";
                query.CommandType = CommandType.StoredProcedure;

                query.CreateParameter<int>("@UserID", userID, SqlDbType.Int);
                query.CreateParameter<int>("@TargetUserID", targetUserID, SqlDbType.Int);
                query.CreateParameter<string>("@Content", content, SqlDbType.NVarChar, 3000);
                query.CreateParameter<string>("@CreateIP", ip, SqlDbType.VarChar, 50);

                query.CreateParameter<bool>("@GetNewMessages", getNewMessages, SqlDbType.Bit);
                query.CreateParameter<int>("@LastMessageID", lastMessageID, SqlDbType.Int);

                if (getNewMessages)
                {
                    using (XSqlDataReader reader = query.ExecuteReader())
                    {
                        while (reader.Read())
                            messages.Insert(0, new ChatMessage(reader));
                    }
                }
                else
                    query.ExecuteNonQuery();
            }

            return messages;
        }
Example #24
0
        public override ChatMessageCollection GetChatMessages(int userID, int targetUserID, int pageNumber, int pageSize, bool updateIsReaded)
        {
            ChatMessageCollection result;

            using (SqlQuery query = new SqlQuery())
            {
                if (pageNumber != 0)
                {
                    query.Pager.BeforeExecuteDealcre.Add("@TotalMessages", SqlDbType.Int);
                    query.Pager.BeforeExecute = @"SELECT @TotalMessages = TotalMessages FROM bx_ChatSessions WHERE UserID = @UserID AND TargetUserID = @TargetUserID;";
                    query.Pager.TableName = "bx_ChatMessages";
                    query.Pager.SortField = "MessageID";
                    query.Pager.PageNumber = pageNumber;
                    query.Pager.PageSize = pageSize;
                    query.Pager.IsDesc = true;
                    query.Pager.SelectCount = true;
                    query.Pager.TotalRecordsVariable = "@TotalMessages";
                    query.Pager.Condition = "UserID = @UserID AND TargetUserID = @TargetUserID";

                    query.CreateParameter<int>("@UserID", userID, SqlDbType.Int);
                    query.CreateParameter<int>("@TargetUserID", targetUserID, SqlDbType.Int);

                    if (updateIsReaded)
                    {
                        query.Pager.AfterExecute = @"
     UPDATE bx_ChatMessages SET IsRead = 1 WHERE UserID = @UserID AND TargetUserID = @TargetUserID AND IsRead = 0;
                    ";
                    }
                }
                else
                {
                    query.CommandText = "SELECT Top " + pageSize + " * FROM bx_ChatMessages WHERE UserID = @UserID AND TargetUserID = @TargetUserID ORDER BY MessageID Desc;";
                    query.CommandText += "SELECT COUNT(*) FROM bx_ChatMessages WHERE UserID = @UserID AND TargetUserID = @TargetUserID;";
                    query.CreateParameter<int>("@UserID", userID, SqlDbType.Int);
                    query.CreateParameter<int>("@TargetUserID", targetUserID, SqlDbType.Int);
                }

                using (XSqlDataReader reader = query.ExecuteReader())
                {
                    result = new ChatMessageCollection(reader);

                    if (reader.NextResult())
                    {
                        if (reader.Read())
                            result.TotalRecords = reader.Get<int>(0);
                    }
                }

                return result;
            }
        }
Example #25
0
        protected void Page_Load(object sender, System.EventArgs e)
        {
            AddNavigationItem("对话");

            if (!EnableChatFunction)
            {
                ShowError("管理员已关闭对话功能!");
                return;
            }

            m_PageNumber        = _Request.Get <int>("page", Method.All, 0);
            m_MessagePageNumber = _Request.Get <int>("msgpage", Method.All, 0);
            m_TargetUserID      = _Request.Get <int>("to", Method.All, 0);

            if (m_TargetUserID > 0)
            {
                m_SelectedChatSession = ChatBO.Instance.GetChatSession(MyUserID, m_TargetUserID);

                if (m_SelectedChatSession == null)
                {
                    m_TargetUserID = 0;
                }

                else
                {
                    WaitForFillSimpleUser <ChatSession>(m_SelectedChatSession, 0);
                }

                bool updateIsReade = false;
                if (m_MessagePageNumber == 1)
                {
                    updateIsReade = true;
                }

                m_ChatMessageList = ChatBO.Instance.GetChatMessages(MyUserID, m_TargetUserID, m_MessagePageNumber, c_MessagePageSize, updateIsReade);

                m_ChatMessageList.Reverse();

                int totalPageNumber = (int)Math.Ceiling((double)m_ChatMessageList.TotalRecords / (double)c_MessagePageSize);
                if (m_MessagePageNumber == 0)
                {
                    m_MessagePageNumber = totalPageNumber;
                }
                else
                {
                    m_MessagePageNumber = (totalPageNumber + 1) - m_MessagePageNumber;
                }

                WaitForFillSimpleUsers <ChatMessage>(m_ChatMessageList, 0);

                SetPager("messagelist", BbsRouter.GetUrl("my/chat", "page=" + m_PageNumber + "&to=" + TargetUserID + "&msgpage={0}"), m_MessagePageNumber, c_MessagePageSize, m_ChatMessageList.TotalRecords);
            }

            if (_Request.IsClick("beginChat"))
            {
                ProcessBeginChat();
            }

            m_ChatSessionList = ChatBO.Instance.GetChatSessions(MyUserID, m_PageNumber, c_SessionPageSize);
            WaitForFillSimpleUsers <ChatSession>(m_ChatSessionList, 0);

            SetPager("chatlist", BbsRouter.GetUrl("my/chat", "page={0}"), m_PageNumber, c_SessionPageSize, m_ChatSessionList.TotalRecords);
        }