/// <summary>
        /// Process message
        /// </summary>
        /// <param name="message">Queue message</param>
        /// <returns>Process message task</returns>
        protected override async Task Process(IMessage message)
        {
            if (message is RelationshipMessage)
            {
                RelationshipMessage relationshipMessage = message as RelationshipMessage;
                ProcessType         processType         = ProcessType.Backend;
                if (relationshipMessage.DequeueCount > 1)
                {
                    processType = ProcessType.BackendRetry;
                }

                IUserRelationshipLookupEntity followerRelationshipLookupEntity = await this.relationshipsManager.ReadFollowerRelationship(
                    relationshipMessage.FollowerKeyUserHandle,
                    relationshipMessage.FollowingKeyUserHandle,
                    relationshipMessage.AppHandle);

                if (followerRelationshipLookupEntity != null && followerRelationshipLookupEntity.LastUpdatedTime > relationshipMessage.LastUpdatedTime)
                {
                    return;
                }

                IUserRelationshipLookupEntity followingRelationshipLookupEntity = await this.relationshipsManager.ReadFollowingRelationshipToUser(
                    relationshipMessage.FollowingKeyUserHandle,
                    relationshipMessage.FollowerKeyUserHandle,
                    relationshipMessage.AppHandle);

                if (followingRelationshipLookupEntity != null && followingRelationshipLookupEntity.LastUpdatedTime > relationshipMessage.LastUpdatedTime)
                {
                    return;
                }

                await this.relationshipsManager.UpdateRelationshipToUser(
                    processType,
                    relationshipMessage.RelationshipOperation,
                    relationshipMessage.RelationshipHandle,
                    relationshipMessage.FollowerKeyUserHandle,
                    relationshipMessage.FollowingKeyUserHandle,
                    relationshipMessage.AppHandle,
                    relationshipMessage.LastUpdatedTime,
                    followerRelationshipLookupEntity,
                    followingRelationshipLookupEntity);
            }
        }
Exemple #2
0
        /// <summary>
        /// Send relationship message
        /// </summary>
        /// <param name="relationshipOperation">User relationship operation</param>
        /// <param name="relationshipHandle">Relationship handle</param>
        /// <param name="followerKeyUserHandle">Follower key user handle</param>
        /// <param name="followingKeyUserHandle">Following key user handle</param>
        /// <param name="appHandle">App handle</param>
        /// <param name="lastUpdatedTime">Last updated time</param>
        /// <returns>Send message task</returns>
        public async Task SendRelationshipMessage(
            RelationshipOperation relationshipOperation,
            string relationshipHandle,
            string followerKeyUserHandle,
            string followingKeyUserHandle,
            string appHandle,
            DateTime lastUpdatedTime)
        {
            RelationshipMessage message = new RelationshipMessage()
            {
                RelationshipOperation  = relationshipOperation,
                RelationshipHandle     = relationshipHandle,
                FollowerKeyUserHandle  = followerKeyUserHandle,
                FollowingKeyUserHandle = followingKeyUserHandle,
                AppHandle       = appHandle,
                LastUpdatedTime = lastUpdatedTime
            };

            Queue queue = await this.QueueManager.GetQueue(this.QueueIdentifier);

            await queue.SendAsync(message);
        }