Exemple #1
0
        private SearchResult UpdateSearchHistory(string searchId, DateTime searchDate, double takenTime, int resultsCount)
        {
            SearchHistoryEntity entity = new SearchHistoryEntity(searchId, searchDate, takenTime, resultsCount);
            TableResult         result = _searchHistoryTable.Execute(TableOperation.InsertOrReplace(entity));

            return(new SearchResult(searchId, searchDate, takenTime, resultsCount));
        }
        public Attachment Upload(string filename,
                                 string filetype,
                                 int filesize,
                                 Stream filestream,
                                 string uploader)
        {
            Attachment attachment = new Attachment();

            attachment.UploadTimestamp = DateTime.UtcNow;
            attachment.Filename        = filename;
            attachment.Filetype        = filetype;
            attachment.Filesize        = filesize;
            attachment.Uploader        = uploader;
            attachment.FileID          = Guid.NewGuid().ToString() + Path.GetExtension(filename);
            //attachment.AttachmentId = GenerateAttachmentID(attachment.Uploader, attachment.FileID, attachment.UploadTimestamp);

            AttachmentEntity attachmentEntity = new AttachmentEntity(attachment);
            TableOperation   insertOperation  = TableOperation.InsertOrReplace(attachmentEntity);

            _attachment.Execute(insertOperation);

            CloudBlockBlob blockBlob = _blobcontainer.GetBlockBlobReference(attachment.FileID);

            blockBlob.UploadFromStream(filestream);

            blockBlob.Properties.ContentType = filetype;
            return(attachment);
        }
Exemple #3
0
        public CategoryMessage UpdateCategoryMessage(string[] eventIDs, string from, string to, Category category, DateTime timestamp)
        {
            CategoryMessage message         = new CategoryMessage(eventIDs, from, to, category, timestamp);
            TableOperation  insertOperation = TableOperation.InsertOrReplace((CategoryMessageEntity)message);

            _categoryMsgTable.Execute(insertOperation);
            return(message);
        }
Exemple #4
0
        public string PostRichMessage(string userid, DateTime timestamp, string richMsg)
        {
            DynamicTableEntity richMsgEntity   = CreateRichMessageEntity(userid, timestamp, richMsg);
            TableOperation     insertOperation = TableOperation.InsertOrReplace(richMsgEntity);

            _richMsg.Execute(insertOperation);
            return(richMsgEntity.Properties["RichMsgID"].StringValue);
        }
Exemple #5
0
        public CounterSet CreateCounterSet(string groupID, string name, string description = null)
        {
            if (GetCounterSet(groupID, name) != null)
            {
                throw new CounterSetAlreadyExistException();
            }
            CounterSet cs = new CounterSet();

            cs.Group          = groupID;
            cs.Name           = name;
            cs.Description    = description;
            cs.RecordCount    = 0;
            cs.LastUpdateTime = DateTime.UtcNow;
            CounterSetEntity entity          = cs;
            TableOperation   insertOperation = TableOperation.Insert(entity);

            _counterSet.Execute(insertOperation);
            return(entity);
        }
Exemple #6
0
        private void SaveSearchResults(string searchId, Dictionary <string, int> searchResults)
        {
            foreach (var key in searchResults.Keys)
            {
                var mi   = new MessageIdentity().FromMessageString(key);
                var rank = searchResults[key];

                SearchResultEntity entity          = new SearchResultEntity(searchId, rank, mi);
                TableOperation     insertOperation = TableOperation.InsertOrReplace(entity);
                _searchResultsTable.Execute(insertOperation);
            }
        }
Exemple #7
0
        public void AppendDataRecord(int id, string key, string value)
        {
            if (System.Text.UTF8Encoding.UTF8.GetByteCount(key) > MetricRecordKeyTooLongException.MaxKeyLengthInByte)
            {
                throw new MetricRecordKeyTooLongException();
            }

            using (var _gorillaCtx = new MSGorillaEntities())
            {
                MetricDataSet data = _gorillaCtx.MetricDataSets.Find(id);
                if (data == null)
                {
                    throw new MetricDataSetNotFoundException();
                }

                MetricEntity mentity = null;
                if ((data.RecordCount % MetricEntity.MaxMetricRecord) == 0)
                {
                    //create a new entity
                    mentity = new MetricEntity(id.ToString(), data.RecordCount.ToString(RowKeyFormat));
                }
                else
                {
                    //retrive the last entity
                    TableResult result = _metricData.ExecuteRetriveOperation(
                        TableOperation.Retrieve <DynamicTableEntity>(
                            id.ToString(),
                            ((data.RecordCount / MetricEntity.MaxMetricRecord) * MetricEntity.MaxMetricRecord).ToString(RowKeyFormat)
                            )
                        );

                    mentity = new MetricEntity((DynamicTableEntity)result.Result);
                }

                //insert new data record
                mentity.Put(key, value, DateTime.UtcNow);
                TableOperation insertOperation = TableOperation.InsertOrReplace(mentity.ToITableEntity());
                _metricData.Execute(insertOperation);

                data.RecordCount++;
                _gorillaCtx.SaveChanges();
            }
        }
Exemple #8
0
        private void SaveWordsIndex(Dictionary <string, Word> wordsIndex)
        {
            foreach (var key in wordsIndex.Keys)
            {
                var word = wordsIndex[key] as Word;

                var msgWithPos = word.InMessagesWithPosition();
                foreach (var m in msgWithPos)
                {
                    var msg = new MessageIdentity();
                    msg.FromMessageString(m.Key);
                    var pos = m.Value;

                    WordIndexEntity entity          = new WordIndexEntity(word.Text, msg, pos);
                    TableOperation  insertOperation = TableOperation.InsertOrReplace(entity);
                    _wordsIndexTable.Execute(insertOperation);
                }
            }
        }
Exemple #9
0
        public void InsertCounterRecord(CounterRecord record, string name, string groupID)
        {
            int id;
            DynamicTableEntity entity = CounterRecordHelper.ToTableEntity(record, "pk", "rk");

            int loopCount = 0;

            while (true)
            {
                try
                {
                    CounterSetEntity counterSet = GetCounterSet(groupID, name);
                    if (counterSet == null)
                    {
                        throw new CounterSetNotFoundException();
                    }

                    id = counterSet.RecordCount;
                    counterSet.RecordCount++;

                    TableOperation updateOperation = TableOperation.InsertOrReplace(counterSet);
                    _counterSet.Execute(updateOperation);

                    break;
                }
                catch (Exception e)
                {
                    loopCount++;
                    if (loopCount >= 100)
                    {
                        throw e;
                    }
                }
            }

            entity.PartitionKey = ToRecordPK(groupID, name);
            entity.RowKey       = ToRecordRK(id);
            TableOperation insertOperation = TableOperation.Insert(entity);

            _counterRecord.Execute(insertOperation);
        }
Exemple #10
0
        public Reply PostReply(string user,
                               string[] atUser,
                               string msgContent,
                               string richMessage,
                               string[] attachmentID,
                               DateTime timestamp,
                               //string originMessageUser,
                               string originMessageID)
        {
            if (_accManager.FindUser(user) == null)
            {
                throw new UserNotFoundException(user);
            }

            //merge toUser list and @somebody in the message content
            List <String>    validToUsers = new List <String>();
            HashSet <string> ToUserIDs    = new HashSet <string>();

            ToUserIDs.UnionWith(Utils.GetAtUserid(msgContent));
            if (atUser != null)
            {
                ToUserIDs.UnionWith(atUser);
            }
            foreach (string uid in ToUserIDs)
            {
                var temp = _accManager.FindUser(uid);
                if (temp != null)
                {
                    validToUsers.Add(temp.Userid);
                }
            }
            atUser = validToUsers.ToArray();

            TableOperation retreiveOperation = MessageManager.RetrieveUserlineMsgByID <UserLineEntity>(originMessageID);
            TableResult    retreiveResult    = _userline.Execute(retreiveOperation);
            UserLineEntity originMsg         = ((UserLineEntity)retreiveResult.Result);

            if (originMsg == null)
            {
                throw new MessageNotFoundException();
            }

            //Insert Rich Message
            string richMessageID = null;

            if (!string.IsNullOrEmpty(richMessage))
            {
                richMessageID = _richMsgManager.PostRichMessage(user, timestamp, richMessage);
            }

            //Reply reply = new Reply(user, atUser, msgContent, timestamp, originMessageUser, originMessageID);
            Reply reply = new Reply(user, originMsg.Group, msgContent, timestamp, null, originMessageID, atUser, richMessageID, attachmentID);

            //insert reply
            ReplyEntity    replyEntity     = new ReplyEntity(reply);
            TableOperation insertOperation = TableOperation.Insert(replyEntity);

            _reply.Execute(insertOperation);

            //update reply count
            originMsg.ReplyCount++;
            TableOperation updateOperation = TableOperation.Replace(originMsg);

            _userline.Execute(updateOperation);

            foreach (string userid in atUser)
            {
                if (_accManager.FindUser(userid) == null)
                {
                    continue;
                }
                //notif user
                ReplyNotificationEntifity notifEntity = new ReplyNotificationEntifity(userid, reply);
                insertOperation = TableOperation.Insert(notifEntity);
                _replyNotification.Execute(insertOperation);
                _replyArchive.Execute(insertOperation);

                _notifManager.incrementReplyNotifCount(userid);
            }

            return(reply);
        }
Exemple #11
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);
                }
            }
        }
Exemple #12
0
        public Message PostMessage(string userid,
                                   string groupID,
                                   string eventID,
                                   string schemaID,
                                   string[] owner,
                                   string[] atUser,
                                   string[] topicName,
                                   string message,
                                   string richMessage,
                                   string[] attachmentID,
                                   int importance,
                                   DateTime timestamp)
        {
            if ("none".Equals(message))
            {
                message = "";
            }
            if (message.Length > 2048)
            {
                throw new MessageTooLongException();
            }
            UserProfile user = _accManager.FindUser(userid);

            if (user == null)
            {
                throw new UserNotFoundException(userid);
            }

            if (!_schemaManager.Contain(schemaID))
            {
                throw new SchemaNotFoundException();
            }

            //merge userid from argument as well as message
            HashSet <string> validAtUsers = new HashSet <string>();
            HashSet <string> atUserids    = new HashSet <string>();

            atUserids.UnionWith(Utils.GetAtUserid(message));
            if (atUser != null)
            {
                atUserids.UnionWith(atUser);
            }
            foreach (string uid in atUserids)
            {
                try
                {
                    Membership member = _groupManager.CheckMembership(groupID, userid);
                    validAtUsers.Add(member.MemberID);
                }
                catch { }
            }

            //merge topic from argument as well as message
            HashSet <string> topic = new HashSet <string>();

            topic.UnionWith(Utils.GetTopicNames(message));
            if (topicName != null)
            {
                topic.UnionWith(topicName);
            }

            //Insert Rich Message
            string richMessageID = null;

            if (!string.IsNullOrEmpty(richMessage))
            {
                richMessageID = _richMsgManager.PostRichMessage(userid, timestamp, richMessage);
            }

            // create message
            Message msg = new Message(userid, groupID, message, timestamp, eventID, schemaID, owner, validAtUsers.ToArray(), topic.ToArray(), richMessageID, attachmentID, importance);
            //insert into Userline
            TableOperation insertOperation = TableOperation.InsertOrReplace(new UserLineEntity(msg));

            _userline.Execute(insertOperation);

            //insert into poster's homeline
            insertOperation = TableOperation.InsertOrReplace(new HomeLineEntity(msg.User, msg));
            _homeline.Execute(insertOperation);

            //insert into QueueMessage
            //QueueMessage queueMessage = new QueueMessage(QueueMessage.TypeMessage, msg.ToJsonString());
            _queue.AddMessage(msg.toAzureCloudQueueMessage());
            _spiderqueue.AddMessage(msg.toAzureCloudQueueMessage());
            _mailMessageQueue.AddMessage(msg.toAzureCloudQueueMessage());

            user.MessageCount++;
            _accManager.UpdateUser(user);

            return(msg);
        }