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