Example #1
0
        public void SpreadMessage(Message message)
        {
            TableOperation insertOperation;

            //insert into Eventline
            if (!string.IsNullOrEmpty(message.EventID) && !"none".Equals(message.EventID))
            {
                insertOperation = TableOperation.InsertOrReplace(new EventLineEntity(message));
                _eventline.Execute(insertOperation);
            }

            //insert into PublicSquareLine
            insertOperation = TableOperation.InsertOrReplace(new PublicSquareLineEntity(message));
            _publicSquareLine.Execute(insertOperation);

            //insert into Atline
            if (message.AtUser != null)
            {
                foreach (string atUserid in message.AtUser)
                {
                    UserProfile user = _accManager.FindUser(atUserid);
                    if (user != null)
                    {
                        insertOperation = TableOperation.InsertOrReplace(new AtLineEntity(user.Userid, message));
                        _atline.Execute(insertOperation);

                        _notifManager.incrementAtlineNotifCount(user.Userid);
                    }
                }
            }

            //insert into Topicline
            if (message.TopicName != null)
            {
                foreach (string topicName in message.TopicName)
                {
                    Topic topic = _topicManager.FindTopicByName(topicName, new string[] { message.Group });
                    if (topic == null)
                    {
                        topic          = new Topic();
                        topic.Name     = topicName;
                        topic.MsgCount = 0;
                        topic.GroupID  = message.Group;
                        _topicManager.AddTopic(topic);
                        topic = _topicManager.FindTopicByName(topicName, new string[] { message.Group });
                    }

                    insertOperation = TableOperation.InsertOrReplace(new TopicLine(message, topic.Id.ToString()));
                    _topicline.Execute(insertOperation);

                    _topicManager.incrementTopicCount(topic.Id);
                    _topicManager.incrementUnreadMsgCountOfFavouriteTopic(topic.Id);
                }
            }

            if (message.Owner != null)
            {
                foreach (string ownerid in message.Owner)
                {
                    UserProfile user = _accManager.FindUser(ownerid);
                    if (user != null)
                    {
                        insertOperation = TableOperation.InsertOrReplace(new OwnerLineEntity(user.Userid, message));
                        _ownerline.Execute(insertOperation);
                        _notifManager.incrementOwnerlineNotifCount(user.Userid);
                    }
                }
            }


            //insert into homeline
            HashSet <string> groupMember = new HashSet <string>();

            foreach (var member in _groupManager.GetAllGroupMember(message.Group))
            {
                groupMember.Add(member.MemberID.ToLower());
            }


            List <UserProfile> followers = _accManager.Followers(message.User);

            //followers.Add(_accManager.FindUser(message.User));
            //speed tweet to followers
            foreach (UserProfile user in followers)
            {
                if (!groupMember.Contains(user.Userid.ToLower()))
                {
                    continue;
                }
                HomeLineEntity entity = new HomeLineEntity(user.Userid, message);
                insertOperation = TableOperation.InsertOrReplace(entity);
                _homeline.Execute(insertOperation);

                _notifManager.incrementHomelineNotifCount(user.Userid);

                if (message.Importance == 0)
                {
                    _notifManager.incrementImportantMsgCount(user.Userid);
                }
            }
        }