Exemplo n.º 1
0
 protected override void DoReceive()
 {
     // get relation info
     var reldata = AccountRelationDataStore.Get(_authInfo.Id);
     var beforeFollowing = new AVLTree<long>(reldata.Following);
     var beforeFollowers = new AVLTree<long>(reldata.Followers);
     var beforeBlockings = new AVLTree<long>(reldata.Blockings);
     // get followings / followers
     Observable.Merge(
         _authInfo.GetFriendsIdsAll(_authInfo.Id)
                  .Do(id => beforeFollowing.Remove(id))
                  .Do(reldata.AddFollowing),
         _authInfo.GetFollowerIdsAll(_authInfo.Id)
                  .Do(id => beforeFollowers.Remove(id))
                  .Do(reldata.AddFollower),
         _authInfo.GetBlockingsIdsAll()
                  .Do(id => beforeBlockings.Remove(id))
                  .Do(reldata.AddBlocking))
               .Subscribe(_ => { },
                          ex => BackstageModel.RegisterEvent(
                              new OperationFailedEvent("relation receive error: " +
                                                       _authInfo.UnreliableScreenName + " - " +
                                                       ex.Message)),
                          () =>
                          {
                              // cleanup remains
                              beforeFollowing.ForEach(reldata.RemoveFollowing);
                              beforeFollowers.ForEach(reldata.RemoveFollower);
                              beforeBlockings.ForEach(reldata.RemoveBlocking);
                          });
 }