//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); } } }
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(); } } }