private void RegisterEvent(TwitterStreamingElement elem)
 {
     switch (elem.EventType)
     {
         case EventType.Blocked:
             EventHub.NotifyBlocked(elem.EventSourceUser, elem.EventTargetUser);
             break;
         case EventType.Unblocked:
             EventHub.NotifyUnblocked(elem.EventSourceUser, elem.EventTargetUser);
             break;
         case EventType.Favorite:
             EventHub.NotifyFavorited(elem.EventSourceUser, elem.EventTargetTweet);
             break;
         case EventType.Unfavorite:
             EventHub.NotifyUnfavorited(elem.EventSourceUser, elem.EventTargetTweet);
             break;
         case EventType.Follow:
             EventHub.NotifyFollowed(elem.EventSourceUser, elem.EventTargetUser);
             break;
         case EventType.Unfollow:
             EventHub.NotifyUnfollwed(elem.EventSourceUser, elem.EventTargetUser);
             break;
         case EventType.LimitationInfo:
             EventHub.NotifyLimitationInfoGot(AuthInfo, elem.TrackLimit.GetValueOrDefault());
             break;
         default:
             return;
     }
 }
 private void Register(TwitterStreamingElement elem)
 {
     _hardErrorRetryCount = 0; // initialize error count
     switch (elem.EventType)
     {
         case EventType.Empty:
             // deliver tweet or something.
             if (elem.Status != null)
             {
                 Observable.Return(elem.Status).RegisterToStore();
             }
             if (elem.DeletedId != null)
             {
                 StatusStore.Remove(elem.DeletedId.Value);
             }
             break;
         case EventType.Follow:
         case EventType.Unfollow:
             long source = elem.EventSourceUser.Id;
             long target = elem.EventTargetUser.Id;
             bool isFollowed = elem.EventType == EventType.Follow;
             if (source == AuthInfo.Id) // follow or remove
             {
                 AuthInfo.GetAccountData().SetFollowing(target, isFollowed);
             }
             else if (target == AuthInfo.Id) // followed or removed
             {
                 AuthInfo.GetAccountData().SetFollower(source, isFollowed);
             }
             else
             {
                 return;
             }
             if (isFollowed)
                 RegisterEvent(elem);
             break;
         case EventType.Blocked:
             if (elem.EventSourceUser.Id != AuthInfo.Id) return;
             AuthInfo.GetAccountData().AddBlocking(elem.EventTargetUser.Id);
             break;
         case EventType.Unblocked:
             if (elem.EventSourceUser.Id != AuthInfo.Id) return;
             AuthInfo.GetAccountData().RemoveBlocking(elem.EventTargetUser.Id);
             break;
         default:
             RegisterEvent(elem);
             break;
     }
 }