Example #1
0
        public override IDeferedPushObservable <TOut> PushValues(TIn input)
        {
            var src = new DeferedPushObservable <string>(pushValue =>
            {
                using (base.OpenProcess())
                    using (var sr = new StreamReader(_args.DataStreamSelector(input)))
                        while (!sr.EndOfStream)
                        {
                            pushValue(sr.ReadLine());
                        }
            });
            var ret = src.Map(dataLine => _args.ResultSelector(input, dataLine));

            return(new DeferedWrapperPushObservable <TOut>(ret, src.Start));
        }
        public void PushValues(int nb, bool automaticallyStartsOnHandle)
        {
            var             inputValues  = Enumerable.Range(0, nb).ToList();
            var             outputValues = new List <int>();
            bool            completed    = false;
            EventWaitHandle waitHandle   = null;

            if (automaticallyStartsOnHandle)
            {
                waitHandle = new EventWaitHandle(false, EventResetMode.ManualReset);
            }
            var observable = new DeferedPushObservable <int>((pushValue) =>
            {
                foreach (var item in inputValues)
                {
                    pushValue(item);
                }
            }, waitHandle);

            var task = observable.ToTaskAsync();

            System.Threading.Thread.Sleep(99); //not more than 100!!!

            //for (int i = 0; i < 5000; i++)
            //{

            //};
            observable.Subscribe(outputValues.Add);

            if (!automaticallyStartsOnHandle)
            {
                observable.Start();
            }
            else
            {
                waitHandle.Set();
            }
            Assert.IsTrue(task.Wait(5000), "the stream should complete");
            for (int i = 0; i < nb; i++)
            {
                Assert.AreEqual(i, outputValues[i], "all values should be the same");
            }
            Assert.AreEqual(inputValues.Count, outputValues.Count, "nb items from the input source must be the same that in the output");
            Assert.IsFalse(completed, "shouldn't be completed");
        }
Example #3
0
        public override IDeferedPushObservable <TOut> PushValues(TIn input)
        {
            var src = new DeferedPushObservable <string>(pushValue =>
            {
                using (base.OpenProcess())
                    using (var sr = new StreamReader(_args.DataStreamSelector(input)))
                        while (!sr.EndOfStream)
                        {
                            pushValue(sr.ReadLine());
                        }
            });

            if (_args.Mapping.HasColumnHeader)
            {
                var lineParserS = src
                                  .Skip(_args.Mapping.FirstLinesToIgnore)
                                  .Take(1)
                                  .Map(_args.Mapping.GetSerializer);
                var ret = src
                          .Skip(1 + _args.Mapping.FirstLinesToIgnore)
                          .Filter(i => !string.IsNullOrWhiteSpace(i))
                          .CombineWithLatest(lineParserS, (txt, parser) => parser.Deserialize(txt))
                          .Map(i => _args.ResultSelector(input, i));
                return(new DeferedWrapperPushObservable <TOut>(ret, src.Start));
            }
            else
            {
                var serializer = _args.Mapping.GetSerializer();
                var ret        = src
                                 .Skip(_args.Mapping.FirstLinesToIgnore)
                                 .Filter(i => !string.IsNullOrWhiteSpace(i))
                                 .Map(serializer.Deserialize)
                                 .Map(i => _args.ResultSelector(input, i));
                return(new DeferedWrapperPushObservable <TOut>(ret, src.Start));
            }
        }