示例#1
0
        internal CellObserver(Generic.ICell <T> source, IObserver <T> target)
        {
            _source = source;
            _target = target;

            source.Change += OnChange;
        }
示例#2
0
        internal SessionObserver(Generic.ICell <T> source, IObserver <KeyValuePair <ISession, KeyValuePair <string, T> > > target)
        {
            _source = source;
            _target = target;

            source.Change += OnChange;
        }
示例#3
0
 public TraceSubscriber(Generic.ICell <T> source, FSharpFunc <T, string> formater, string prefix = "")
 {
     listener  = source.Subscribe(this);
     printline = "Observed " + prefix + source.Mnemonic + " : {0}";
     _formater = formater;
     var v = source.Value;
 }
示例#4
0
        internal TraceObserver(Generic.ICell <T> source, IObserver <Tuple <ISession, Generic.ICell <T>, CellEvent, ICell, DateTime> > target)
        {
            _source = source;
            _target = target;

            source.Change += OnChange;
        }
示例#5
0
        internal SessionObserver(Generic.ICell <T> source, IObserver <KeyValuePair <ISession, KeyValuePair <string, T> > > target)
        {
            _source = source;
            _target = target;

            source.Change += OnChange;
            System.Threading.Tasks.Task.Run(() => _source.Value);
        }
示例#6
0
        internal CellObserver(Generic.ICell <T> source, IObserver <T> target)
        {
            _source = source;
            _target = target;

            source.Change += OnChange;
            System.Threading.Tasks.Task.Run(() => _source.Value);
        }
示例#7
0
        internal TraceObserver(Generic.ICell <T> source, IObserver <Tuple <ISession, Generic.ICell <T>, CellEvent, ICell, DateTime> > target)
        {
            _source = source;
            _target = target;

            source.Change += OnChange;
            System.Threading.Tasks.Task.Run(() => _source.Value);
        }
示例#8
0
 public ConsoleSessionSubscriber(Generic.ICell <T> source, string prefix = "")
 {
     if (typeof(T) != typeof(string) && typeof(T).IsSubclassOf(typeof(IEnumerable)))
     {
         collection = true;
     }
     listener  = source.Subscribe(this);
     printline = "{0} Observed {1}" + prefix + source.Mnemonic + " : {2}";
     var v = source.Value;
 }
示例#9
0
        public void OnChange(CellEvent eventType, ICellEvent root, ICellEvent sender, DateTime epoch, ISession session)
        {
            switch (eventType)
            {
            case CellEvent.Calculate:
                _target.OnNext(_source.Value);
                _retry = 0;
                break;

            case CellEvent.Delete:
                _target.OnCompleted();
                break;

            case CellEvent.Error:
                try
                {
                    _target.OnNext(_source.Value);
                }
                catch (Exception e)
                {
                    _target.OnError(e);
                    if (root is ICell c && _retry++ < Cell.ErrorRetry)
                    {
                        Thread.Sleep(_retry * Cell.ErrorRetry * 100);
                        c.OnChange(CellEvent.Calculate, this, this, DateTime.Now, session);
                    }
                }
                break;

            case CellEvent.Link:
                if (_source.Parent != null && _source.Parent is Model)
                {
                    var source = ((Model)_source.Parent)[_source.Mnemonic] as Generic.ICell <T>;
                    if (source != null)
                    {
                        _source = source;
                        OnChange(CellEvent.Calculate, sender, sender, epoch, session);
                    }
                }
                break;

            default:
                break;
            }
        }
示例#10
0
        public void OnChange(CellEvent eventType, ICellEvent sender, DateTime epoch, ISession session)
        {
            switch (eventType)
            {
            case CellEvent.Calculate:
                _target.OnNext(_source.Value);
                break;

            case CellEvent.Delete:
                _target.OnCompleted();
                break;

            case CellEvent.Error:
                try
                {
                    _target.OnNext(_source.Value);
                }
                catch (Exception e)
                {
                    _target.OnError(e);
                }
                break;

            case CellEvent.Link:
                if (_source.Parent != null && _source.Parent is Model)
                {
                    var source = ((Model)_source.Parent)[_source.Mnemonic] as Generic.ICell <T>;
                    if (source != null)
                    {
                        _source = source;
                        OnChange(CellEvent.Calculate, sender, epoch, session);
                    }
                }
                break;

            default:
                break;
            }
        }
示例#11
0
 public ConsoleSubscriber(Generic.ICell <T> source, string prefix = "")
 {
     listener  = source.Subscribe(this);
     printline = "Observed " + prefix + " : {0}";
     var v = source.Value;
 }