//This method will occur only once when a chatting room will be loaded.
        private void LoadRecentMessages(string strRoomSID, IList <Msg> msgs)
        {
            var FindSuccessMessagesQuery = Query.And(
                Query <MessageEntity> .EQ(m => m.RoomSid, strRoomSID),
                Query <MessageEntity> .NE(m => m.State, (int)MsgStatus.Failed),
                Query <MessageEntity> .NE(m => m.State, (int)MsgStatus.Sending));

            var FindFailedMessageQuery = Query.And(
                Query <MessageEntity> .EQ(m => m.RoomSid, strRoomSID),
                Query.Or(
                    Query <MessageEntity> .EQ(m => m.State, (int)MsgStatus.Failed),
                    Query <MessageEntity> .EQ(m => m.State, (int)MsgStatus.Sending))
                );

            var MessageCollection     = ConnectionHelper.DB.GetCollection <MessageEntity>("MessageEntity");
            var FindedSuccessMessages = MessageCollection.Find(FindSuccessMessagesQuery).SetSortOrder(SortBy.Descending("SendTime")).SetLimit(20);
            var FindedFailedMessages  = MessageCollection.Find(FindFailedMessageQuery).OrderByDescending(m => m.Id);
            var FindedMessages        = FindedFailedMessages.Concat(FindedSuccessMessages);

            foreach (MessageEntity msgEntity in FindedMessages)
            {
                Msg       WillAddMsg;
                string    strSenderSID = msgEntity.SenderSid;
                MsgStatus MsgState     = (MsgStatus)msgEntity.State;
                if (MsgStatus.Sending == MsgState)
                {
                    MsgState = MsgStatus.Failed;
                }

                ContentType ContentType       = (ContentType)msgEntity.Type;
                int         nReadMembersCount = (null == msgEntity.ReadMembers ? 0 : msgEntity.ReadMembers.Count);

                var UserCollection = ConnectionHelper.DB.GetCollection <UserEntity>("UserEntity");
                var FindUserQuery  = Query <UserEntity> .EQ(u => u.Sid, strSenderSID);

                var FindedUser = UserCollection.FindOne(FindUserQuery);

                if (null != FindedUser)
                {
                    if (this.m_strMySid == strSenderSID)
                    {
                        WillAddMsg = new ChatMsg(msgEntity.Id.ToString(), msgEntity.Sid, msgEntity.RoomSid, msgEntity.Content, ContentType,
                                                 msgEntity.SendTime, MsgState, nReadMembersCount, FindedUser.NickName, null, this.m_AnonymousThumbnailDictionary[this.m_strMySid]);
                    }
                    else
                    {
                        if (false == this.m_AnonymousThumbnailDictionary.ContainsKey(strSenderSID))
                        {
                            this.m_AnonymousThumbnailDictionary.Add(strSenderSID, ColorGenerator.Instance.GetRandomBrush());
                        }

                        WillAddMsg = new OpponentMsg(msgEntity.Id.ToString(), msgEntity.Sid, msgEntity.RoomSid, msgEntity.Content, ContentType,
                                                     msgEntity.SendTime, MsgState, nReadMembersCount, FindedUser.NickName, null, this.m_AnonymousThumbnailDictionary[strSenderSID]);
                    }

                    msgs.Add(WillAddMsg);
                }
            }
        }
Exemple #2
0
        private void ExecuteReceiveChatMsgCommand(ReceivedMsg rcvMsg)
        {
            var MessageCollection = ConnectionHelper.DB.GetCollection <MessageEntity>("MessageEntity");
            var FindMessageQuery  = Query <MessageEntity> .EQ(m => m.Id, new ObjectId(rcvMsg.Id));

            var FindedMessage = MessageCollection.FindOne(FindMessageQuery);

            var UserCollection = ConnectionHelper.DB.GetCollection <UserEntity>("UserEntity");
            var FindUserQuery  = Query <UserEntity> .EQ(u => u.Sid, rcvMsg.SenderSid);

            var FindedUser = UserCollection.FindOne(FindUserQuery);

            if (null != FindedUser && null != FindedMessage)
            {
                string strFindedUserSid = FindedUser.Sid;

                if (string.IsNullOrEmpty(rcvMsg.ThumbnailPath))
                {
                    if (false == this.m_AnonymousThumbnailDictionary.ContainsKey(strFindedUserSid))
                    {
                        this.m_AnonymousThumbnailDictionary.Add(strFindedUserSid, ColorGenerator.Instance.GetRandomBrush());
                    }
                }

                var RcvMessage = new OpponentMsg(rcvMsg.Id, rcvMsg.Sid, rcvMsg.RoomSid, rcvMsg.Content, rcvMsg.ContentType,
                                                 rcvMsg.SendTime, MsgStatus.Received, rcvMsg.ReadMembersCount, FindedUser.NickName, rcvMsg.ThumbnailPath,
                                                 this.m_AnonymousThumbnailDictionary[strFindedUserSid]);

                this.Messages.Add(RcvMessage);
                this.EndReceiveMsgCommand(RcvMessage);

                var WillAddUnReadMsg = new UnReadMsg(FindedMessage.Id, FindedMessage.ReadMembers, rcvMsg.Sid, rcvMsg.RoomSid, AuthRepository.MQKeyInfo.UserSid);
                this.m_UnReadMessages.Add(WillAddUnReadMsg);

                if (true == rcvMsg.IsActivatedView)
                {
                    this.RequestReadMsgs();
                }
            }
        }