Metrooz.Models.NotificationManager.Activate C# (CSharp) 메소드

Activate() 공개 메소드

public Activate ( ) : Task
리턴 Task
        public async Task Activate()
        {
            try
            {
                await _syncer.WaitAsync();
                if (_notificationTrigger != null)
                    return;

                //通知の監視をする。
                //  Timerの5分おきの処理とGetStream()の通知更新シグナルの受信をMerge()したものを使う。
                //  GetStream()はDefer().Retry()で例外発生時に再接続させる。間にDelaySubscription()を
                //  挟んで再接続の間に1分間の間隔を開ける。初回接続も1分間遅延するが気にしない。
                _notificationTrigger = Observable.Merge(
                        Observable.Interval(TimeSpan.FromMinutes(5)).Select(num => Unit.Default),
                        Observable.Defer(() => _account.PlusClient.Activity.GetStream().OfType<NotificationSignal>().Select(sig => Unit.Default))
                            .DelaySubscription(TimeSpan.FromMinutes(1))
                            .Retry())
                    .Throttle(TimeSpan.FromMinutes(1))
                    .Subscribe(unit => UpdateUnreadItemCount());
                
                UnreadedStream = new NotificationStream(_account.PlusClient.Notification.GetNotifications(true), _account);
                ReadedStream = new NotificationStream(_account.PlusClient.Notification.GetNotifications(false), _account);
                UpdateUnreadItemCount();
            }
            finally { _syncer.Release(); }
        }
        public async Task Deactivate()