public UniTask Execute(ILifeTime lifeTime)
        {
            //reset local value
            lifeTime.AddCleanUpAction(CleanUpNode);

            var input  = _portPair.InputPort;
            var output = _portPair.OutputPort;

            var valueObservable = input.Receive <TData>();
            var source          = BindToDataSource(valueObservable);

            if (_distinctInput)
            {
                source.Subscribe(x => _valueData.Value = x).AddTo(lifeTime);
            }
            else
            {
                source.Subscribe(_valueData.SetValueForce).AddTo(lifeTime);
            }

            _isFinalyze.Where(x => x)
            .Do(x => output.Publish(_valueData.Value))
            .Subscribe()
            .AddTo(lifeTime);

            return(UniTask.CompletedTask);
        }
        protected sealed override UniTask OnExecute()
        {
            _valueData.Subscribe(x => OnValueUpdate(x).AttachExternalCancellation(LifeTime.TokenSource).Forget())
            .AddTo(LifeTime);

            _isReady.Where(x => x)
            .CombineLatest(_valueData, (x, value) => value)
            .Subscribe(output.Publish)
            .AddTo(LifeTime);

            //reset local value
            var valueObservable = input.Receive <TData>();

            if (distinctInput)
            {
                valueObservable.Subscribe(x => _valueData.Value = x).AddTo(LifeTime);
            }
            else
            {
                valueObservable.Subscribe(_valueData.SetValueForce).AddTo(LifeTime);
            }

            return(UniTask.CompletedTask);
        }
Exemplo n.º 3
0
 public IObservable <IView> SelectStatus(ViewStatus status)
 {
     return(_status.
            Where(x => x == status).
            Select(x => this));
 }