Beispiel #1
0
        static IObservable <IControl> BuildIndicator(
            IObservable <IBinaryMessage> fromSimulator,
            string messageType,
            string title,
            IObservable <Color> foreground,
            IObservable <Color> background)
        {
            var started = fromSimulator
                          .TryParse(Started.MessageType, Started.ReadDataFrom)
                          .Where(m => m.Command.Type == messageType).Select(_ => true);

            var ended = fromSimulator
                        .TryParse(Ended.MessageType, Ended.ReadDataFrom)
                        .Where(m => m.Command.Type == messageType).Select(_ => false);

            // stream of bool that is true from 250 ms after messageType started and false when messageType ends
            var indicator =
                started
                .Merge(ended)
                .Throttle(TimeSpan.FromMilliseconds(250))
                .Merge(ended)
                .DistinctUntilChanged()
                .Select(
                    building => building
                                                        ? Busy.Create(title, background, foreground)
                                                        : Control.Empty);

            return(indicator);
        }