Esempio n. 1
0
        public void UntilWorksTest()
        {
            var storage         = new InMemoryStorageEngine();
            var executionEngine = ExecutionEngineFactory.StartNew(storage);

            executionEngine.Schedule(() =>
            {
                var holder = new UntilTestHolder();
                var task   = holder.Start();
                Roots.Entangle(holder);
                Roots.Entangle(task);
                return(Sync.Next());
            }).Wait();

            executionEngine.Dispose();

            executionEngine = ExecutionEngineFactory.Continue(storage);

            executionEngine.Schedule(() =>
            {
                var holder  = Roots.Resolve <UntilTestHolder>();
                holder.Stop = true;
                return(Roots.Resolve <CTask>());
            }).Wait();

            var completed = executionEngine.Schedule(() => Roots.Resolve <UntilTestHolder>().Completed).Result;

            completed.ShouldBe(true);
        }
        //[TestMethod]
        public void SentMessageIsProcessed()
        {
            var       hostname = "127.0.0.1";
            const int port     = 10_000;

            var storage    = new InMemoryStorageEngine();
            var scheduler1 = ExecutionEngineFactory.StartNew(storage);

            scheduler1.Schedule(() =>
            {
                var msgHandler         = new MessageHandler();
                var connectionListener = new ConnectionServer(hostname, port, msgHandler.Handle);

                Roots.Entangle(msgHandler);
                Roots.Entangle(connectionListener);
            });

            var senderId  = Guid.Empty;
            var msgSender = new TestMessageSender(hostname, port, senderId);

            msgSender.Connect();
            msgSender.SendMessage("HELLO".GetUtf8Bytes(), 0);
            Thread.Sleep(1000);

            var messageHandler = scheduler1.Resolve <MessageHandler>().Result;
            var messages       = messageHandler.GetMessages();

            messages.Count.ShouldBe(1);
            messages[0].ShouldBe("HELLO");

            scheduler1.Do <ConnectionServer>(c => c.Shutdown());

            Thread.Sleep(1000);

            scheduler1.Dispose();
            scheduler1     = ExecutionEngineFactory.Continue(storage);
            messageHandler = scheduler1.Resolve <MessageHandler>().Result;
            Console.WriteLine(messageHandler);

            msgSender = new TestMessageSender(hostname, port, senderId);
            msgSender.Connect();
            msgSender.SendMessage("HELLO2".GetUtf8Bytes(), 1);
            Thread.Sleep(1000);

            messages = messageHandler.GetMessages();
            messages.Count.ShouldBe(2);
            messages[0].ShouldBe("HELLO");
            messages[1].ShouldBe("HELLO2");

            scheduler1.Dispose();
        }
Esempio n. 3
0
        public static void Continue()
        {
            var storage   = new SimpleFileStorageEngine(@"./TravelAgent.txt", false);
            var scheduler = ExecutionEngineFactory.Continue(storage);

            while (true)
            {
                Console.WriteLine("PRESS ENTER TO STOP PING PONG APP");
                Console.ReadLine();

                scheduler.Dispose();

                Console.WriteLine("PRESS ENTER TO START PING PONG APP");
                Console.ReadLine();

                scheduler = ExecutionEngineFactory.Continue(storage);
            }
        }
Esempio n. 4
0
        public void EmptyMessageQueueCanBeSerializeAndDeserialized()
        {
            var storage = new InMemoryStorageEngine();
            var c       = ExecutionEngineFactory.StartNew(storage);

            c.Schedule(() =>
            {
                var q = new MessageQueue();
                Roots.Entangle(q);
            });

            c.Sync().Wait();

            c.Dispose();

            c = ExecutionEngineFactory.Continue(storage);
            c.Schedule(Roots.Resolve <MessageQueue>);
            c.Sync().Wait();
        }
        private static void Continue()
        {
            var storage = new SimpleFileStorageEngine("./ping_pong.txt", false);
            //var storage = new SqlServerStorageEngine("1", DatabaseHelper.ConnectionString("localhost", "ping_pong", "sa", "Pa55word"));

            var engine = ExecutionEngineFactory.Continue(storage);

            while (true)
            {
                Console.WriteLine("PRESS ENTER TO STOP PING PONG APP");
                Console.ReadLine();

                engine.Dispose();

                Console.WriteLine("PRESS ENTER TO START PING PONG APP");
                Console.ReadLine();

                engine = ExecutionEngineFactory.Continue(storage);
            }
        }
Esempio n. 6
0
        public void NonEmptyMessageQueueCanBeSerializeAndDeserialized()
        {
            var storage = new InMemoryStorageEngine();
            var c       = ExecutionEngineFactory.StartNew(storage);

            c.Schedule(() =>
            {
                var q         = new MessageQueue();
                var hello     = new ImmutableByteArray(Encoding.UTF8.GetBytes("hello"));
                var helloTask = new CTask();
                var world     = new ImmutableByteArray(Encoding.UTF8.GetBytes("world"));
                var worldTask = new CTask();
                q.Add(hello, helloTask);
                q.Add(world, worldTask);
                Roots.Entangle(q);
                Roots.Entangle(new CImmutableList <CTask>(new [] { helloTask, worldTask }));
            });

            c.Sync().Wait();

            c.Dispose();

            c = ExecutionEngineFactory.Continue(storage);
            c.Schedule(() =>
            {
                var queue = Roots.Resolve <MessageQueue>();
                var elms  = queue.GetAll().ToArray();
                elms.Length.ShouldBe(2);
                var s1 = Encoding.UTF8.GetString(elms[0].Array);
                s1.ShouldBe("hello");
                var s2 = Encoding.UTF8.GetString(elms[1].Array);
                s2.ShouldBe("world");

                Roots.Resolve <CImmutableList <CTask> >()[0].SignalCompletion();
            }).Wait();

            c.Sync().Wait();
            c.Dispose();

            c = ExecutionEngineFactory.Continue(storage);
            c.Schedule(() =>
            {
                var queue = Roots.Resolve <MessageQueue>();
                var elms  = queue.GetAll().ToArray();
                elms.Length.ShouldBe(1);
                var s1 = Encoding.UTF8.GetString(elms[0].Array);
                s1.ShouldBe("world");

                Roots.Resolve <CImmutableList <CTask> >()[1].SignalCompletion();
            }).Wait();

            c.Sync().Wait();
            c.Dispose();

            c = ExecutionEngineFactory.Continue(storage);
            c.Schedule(() =>
            {
                var queue = Roots.Resolve <MessageQueue>();
                var elms  = queue.GetAll().ToArray();
                elms.Length.ShouldBe(0);
            }).Wait();

            c.Sync().Wait();
            c.Dispose();
        }
Esempio n. 7
0
 private static Engine Continue(IStorageEngine storageEngine)
 => ExecutionEngineFactory.Continue(storageEngine);