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"); }
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)); } }