Пример #1
0
        public void ZeroSpatialDecimation()
        {
            var source = Source.From(
                Enumerable
                .Range(0, 100)
                .Select(x => (uint)x)
                .Select(x => new TimedObject {
                TachometerCount = x * 50
            })
                );

            var decimator = new SpatialDecimator <TimedObject>(100, 0);

            var probe = CreateTestProbe();

            source.Via(decimator).RunWith(Sink.ActorRef <TimedObject>(probe, new object()), Materializer);

            var actual = probe.ReceiveN(100);

            actual.Should().AllBeAssignableTo <TimedObject>();

            var msgs = actual.Cast <TimedObject>();

            msgs.Should().BeInAscendingOrder(x => x.TachometerCount);

            msgs.Select(x => x.TachometerCount).Should().BeEquivalentTo(Enumerable.Range(0, 100).Select(x => x * 50));
        }
Пример #2
0
        public void RepeatedTachoFilteredOut()
        {
            var source = Source.From(
                Enumerable
                .Range(0, 100)
                .Select(x => (x % 2 == 0) ? x : x - 1)
                .Select(x => (uint)x)
                .Select(x => new TimedObject {
                TachometerCount = x * 50
            })
                );

            var decimator = new SpatialDecimator <TimedObject>(100, 0);

            var probe = CreateTestProbe();

            source.Via(decimator).RunWith(Sink.ActorRef <TimedObject>(probe, new object()), Materializer);

            var actual = probe.ReceiveN(50, Debugger.IsAttached ? TimeSpan.FromSeconds(300) : TimeSpan.FromSeconds(3));

            actual.Should().AllBeAssignableTo <TimedObject>();

            var msgs = actual.Cast <TimedObject>();

            msgs.Should().BeInAscendingOrder(x => x.TachometerCount);

            msgs.Select(x => x.TachometerCount).Should().BeEquivalentTo(Enumerable.Range(0, 50).Select(x => x * 100));
        }
Пример #3
0
        static void Main(string[] args)
        {
            Log.Logger = LoggerFactory.Logger;

            var logSwitch = LoggerFactory.LoggingSwitch;

            var config = ConfigurationFactory.ParseString(File.ReadAllText("config.hocon"));

            logSwitch.MinimumLevel = LogEventLevel.Debug;

            using (var system = ActorSystem.Create("System", config))
                using (var materialiser = system.Materializer())
                {
                    Log.Information("System Started");
                    // Create actors.

                    var loggingActor = system.ActorOf <LoggingActor>("Logger");

                    // Create streams.
                    var generator = Source.From <ISyncData>(GenerateData());

                    var decimator = new SpatialDecimator <ISyncData>(300, 1);

                    var flow = Flow.Create <ISyncData>().Via(decimator);

                    var sink = Sink.ActorRef <ISyncData>(loggingActor, PoisonPill.Instance);

                    var queue = generator.Via(flow).RunWith(sink, materialiser);

                    // Close system logic.
                    Console.CancelKeyPress += (obj, a) =>
                    {
                        system.Terminate().Wait(TimeSpan.FromSeconds(3));
                    };
                    system.WhenTerminated.Wait();
                    Log.Information("System Stopped");
                    Log.CloseAndFlush();
                }
        }