public void SetTimeoutReset()
        {
            // arrange
            var loop = new EventLoop();

            loop.Start(() => { });
            var callbackinvoked = new ManualResetEvent(false);
            var callback        = new Action(() => callbackinvoked.Set());
            var timeout         = TimeSpan.FromMilliseconds(100);

            // act
            var cancelTimeout = loop.SetTimeout(callback, timeout);

            Thread.Sleep(50);
            cancelTimeout.Reset();
            Thread.Sleep(50);
            cancelTimeout.Reset();

            // assert
            Assert.That(callbackinvoked.WaitOne(0), Is.False);
            Assert.That(cancelTimeout, Is.Not.Null);
            Assert.That(callbackinvoked.WaitOne(timeout + timeout), Is.True);

            // cleanup
            loop.Dispose();
            callbackinvoked.Dispose();
        }
Exemple #2
0
        public void StartsElectionAfterElectionTimeout()
        {
            // arrange
            var resetEvent = new ManualResetEvent(false);
            var timeout    = TimeSpan.FromMilliseconds(100);
            var configMock = new Mock <IServerConfiguration>();

            configMock.Setup(mocked => mocked.ElectionTimeout).Returns(timeout);
            var config     = configMock.Object;
            var scheduler  = new EventLoop();
            var serverMock = new Mock <IConsensusServerStateApi>();

            serverMock.Setup(mocked => mocked.StartElection()).Callback(() => resetEvent.Set());
            serverMock.Setup(mocked => mocked.Configuration).Returns(config);
            serverMock.Setup(mocked => mocked.Scheduler).Returns(scheduler);
            var server = serverMock.Object;
            var state  = new Follower(server);

            // act
            state.Start();
            var changedToCandidate = resetEvent.WaitOne(timeout + timeout);

            // assert
            Assert.That(changedToCandidate, Is.True, "An election timout should have occurred and the state should be changed to candidate");

            // cleanup
            scheduler.Dispose();
            resetEvent.Dispose();
        }
Exemple #3
0
        public static void Main(string[] args)
        {
            LogFactory.AddConsoleProvider(LogLevel.Debug);

            try
            {
                eventLoop = new EventLoop();
                Task task = Task.Run(async() => await RunLoopAsync());

                eventLoop.Schedule(loop => loop
                                   .CreateTcp()
                                   .SimultaneousAccepts(true)
                                   .Listen(EndPoint, OnConnection));

                Console.WriteLine("Waiting for loop to complete.");
                task.Wait();
                Console.WriteLine("Loop completed.");
            }
            catch (Exception exception)
            {
                Console.WriteLine($"Loop thread error {exception}.");
            }
            finally
            {
                eventLoop?.Dispose();
            }

            Console.WriteLine("Press any key to terminate the program.");
            Console.ReadLine();
        }
Exemple #4
0
        private static void Main(string[] args)
        {
            // create the event loop
            var loop = new EventLoop();

            // start it with a callback
            loop.Start(() => Console.WriteLine("Event loop has started"));

            // start a timer
            loop.SetTimeout(() => Console.WriteLine("Hello, I am a timeout happening after 1 second"), TimeSpan.FromSeconds(1));
            loop.SetInterval(() => Console.WriteLine("Hello, I am an interval happening every 2 seconds"), TimeSpan.FromSeconds(2));

            // read the app.config
            var appConfigFile = new FileInfo("NLoop.TestApp.exe.config");
            var promise       = appConfigFile.ReadAllBytes(loop);

            promise.Then(content => Console.WriteLine("Success!! read {0} bytes from app.config", content.Length), reason => Console.WriteLine("Dread!! got an error: {0}", reason));

            // send a web request
            var httpClient  = new HttpClient();
            var request     = new HttpRequestMessage(HttpMethod.Get, "https://www.google.com/");
            var httpPromise = httpClient.Send(loop, request);

            httpPromise.Then(content => Console.WriteLine("Success!! read {0} from google.com", content.StatusCode), reason => Console.WriteLine("Dread!! got an error: {0}", reason));
            //httpPromise.Cancel();

            // wait
            Console.WriteLine("Event loop is processing, press any key to exit");
            Console.Read();

            // we are done, dispose the loop so resources will be cleaned up
            loop.Dispose();
        }
Exemple #5
0
        static async Task RunLoopAsync()
        {
            Console.WriteLine("Starting event loop.");

            await eventLoop.RunAsync();

            Console.WriteLine("Event loop completed");
            eventLoop.Dispose();
        }
Exemple #6
0
        public void Close()
        {
            _reactor.CloseConnection(this);

            if (NetworkEventLoop.Disconnection != null)
            {
                NetworkEventLoop.Disconnection(new HeliosConnectionException(ExceptionType.Closed), this);
            }
            EventLoop.Dispose();
        }
Exemple #7
0
        public void TrackResourceDispose()
        {
            // arrange
            var cts      = new CancellationTokenSource();
            var token    = cts.Token;
            var loop     = new EventLoop();
            var disposed = false;

            loop.TrackResource(token, new DisposeAction(() => { disposed = true; }));

            // act
            loop.Dispose();

            // assert
            Assert.That(disposed, Is.True);

            // cleanup
            loop.Dispose();
            cts.Dispose();
        }
Exemple #8
0
 public override void Dispose(bool disposing)
 {
     if (!WasDisposed && disposing && Listener != null)
     {
         Stop();
         Listener.Dispose();
         EventLoop.Dispose();
     }
     IsActive    = false;
     WasDisposed = true;
 }
Exemple #9
0
        public void ThrowIfDisposed()
        {
            // arrange
            var loop = new EventLoop();

            // act
            loop.Start(() => { });
            loop.Dispose();

            // assert
            Assert.That(() => loop.Start(() => { }), Throws.InstanceOf <ObjectDisposedException>());
        }
Exemple #10
0
        public void TrackResourceUntrack()
        {
            // arrange
            var cts      = new CancellationTokenSource();
            var token    = cts.Token;
            var loop     = new EventLoop();
            var disposed = false;
            var disposer = new DisposeAction(() => { disposed = true; });
            var untrack  = loop.TrackResource(token, disposer);

            // assert
            Assert.That(untrack(token), Is.True, "Expected the resource to be untracked");
            Assert.That(untrack(token), Is.False, "Expected the resource to be untracked already");

            // dispose the loop
            loop.Dispose();
            Assert.That(disposed, Is.False);

            // cleanup
            loop.Dispose();
            cts.Dispose();
        }
Exemple #11
0
 protected void Dispose(bool disposing)
 {
     if (!WasDisposed)
     {
         WasDisposed = true;
         if (disposing)
         {
             Close();
             Socket = null;
             EventLoop.Dispose();
         }
     }
 }
Exemple #12
0
        public void StartWithCallback()
        {
            // arrange
            var loop = new EventLoop();
            var wait = new AutoResetEvent(false);

            // act
            loop.Start(() => wait.Set());

            // assert
            Assert.That(() => wait.WaitOne(100), Is.True);

            // cleanup
            loop.Dispose();
            wait.Dispose();
        }
Exemple #13
0
 protected override void Dispose(bool disposing)
 {
     if (!WasDisposed)
     {
         if (disposing)
         {
             if (Client != null)
             {
                 Close();
                 ((IDisposable)Client).Dispose();
                 EventLoop.Dispose();
             }
         }
     }
     WasDisposed = true;
 }
Exemple #14
0
 protected override void Dispose(bool disposing)
 {
     if (!WasDisposed)
     {
         if (disposing)
         {
             if (_client != null)
             {
                 ((IDisposable)_client).Dispose();
                 _client = null;
                 EventLoop.Dispose();
             }
         }
     }
     WasDisposed = true;
 }
        public void SetIntervalParameterChecking()
        {
            // arrange
            var loop = new EventLoop();

            loop.Start(() => { });
            var callback = new Action(() => { });
            var timeout  = TimeSpan.FromMilliseconds(100);

            // assert
            Assert.That(() => ((EventLoop)null).SetInterval(callback, timeout), Throws.InstanceOf <ArgumentNullException>());
            Assert.That(() => loop.SetInterval(null, timeout), Throws.InstanceOf <ArgumentNullException>());

            // cleanup
            loop.Dispose();
        }
Exemple #16
0
        public void StartWithCallback()
        {
            // arrange
            var loop = new EventLoop();
            var wait = new AutoResetEvent(false);

            // act
            loop.Start(() => wait.Set());

            // assert
            Assert.That(() => wait.WaitOne(100), Is.True);

            // cleanup
            loop.Dispose();
            wait.Dispose();
        }
Exemple #17
0
        public void StartWithCallbackCalledTwice()
        {
            // arrange
            var loop = new EventLoop();
            var wait = new CountdownEvent(2);

            // act
            loop.Start(() => wait.Signal());
            loop.Start(() => wait.Signal());

            // assert
            Assert.That(() => wait.WaitHandle.WaitOne(100), Is.True);
            Assert.That(wait.CurrentCount, Is.EqualTo(0));

            // cleanup
            loop.Dispose();
            wait.Dispose();
        }
Exemple #18
0
        public void StartWithCallbackCalledTwice()
        {
            // arrange
            var loop = new EventLoop();
            var wait = new CountdownEvent(2);

            // act
            loop.Start(() => wait.Signal());
            loop.Start(() => wait.Signal());

            // assert
            Assert.That(() => wait.WaitHandle.WaitOne(100), Is.True);
            Assert.That(wait.CurrentCount, Is.EqualTo(0));

            // cleanup
            loop.Dispose();
            wait.Dispose();
        }
Exemple #19
0
        //[Fact]
        public void DisposingLetNoEventsBeDispatched()
        {
            var brokerMock    = new Mock <IObservable <IRxModellingEvent> >();
            var timeScheduler = new ModelTimeScheduler(ModelTimeStep.Day, DateTimeOffset.Parse("2019-01-01"));

            var loop = new EventLoop(timeScheduler, brokerMock.Object);

            loop.Run(time =>
            {
                time.OnUniformTestPassed(t =>
                {
                }, 0.2);
            }, 15);

            Thread.Sleep(80);

            loop.Dispose();
            Console.WriteLine("loop disposed");
            Thread.Sleep(TimeSpan.FromSeconds(10));
        }
        public void SetInterval()
        {
            // arrange
            var loop = new EventLoop();

            loop.Start(() => { });
            var counter  = new CountdownEvent(2);
            var callback = new Action(() => counter.Signal());
            var timeout  = TimeSpan.FromMilliseconds(100);

            // act
            loop.SetInterval(callback, timeout);

            // assert
            Assert.That(counter.Wait(timeout + timeout + timeout), Is.True);

            // cleanup
            loop.Dispose();
            counter.Dispose();
        }
Exemple #21
0
        public void Schedule()
        {
            // arrange
            var loop = new EventLoop();
            var wait = new AutoResetEvent(false);
            var counter = 0;

            // act
            loop.Schedule(() => counter++);
            loop.Schedule(() => counter++);
            loop.Start(() => wait.Set());
            loop.Schedule(() => counter++);

            // assert
            Assert.That(() => wait.WaitOne(100), Is.True);
            Assert.That(counter, Is.EqualTo(3));

            // cleanup
            loop.Dispose();
            wait.Dispose();
        }
Exemple #22
0
        public void DisposesLogAndProtocol()
        {
            // arrange
            var configuration = new Mock <IServerConfiguration>().Object;
            var scheduler     = new EventLoop();
            var logMock       = new Mock <ILog>();
            var log           = logMock.Object;
            var protocolMock  = new Mock <IProtocol>();
            var protocol      = protocolMock.Object;
            var server        = new ConsensusServer(configuration, log, protocol, scheduler);

            // act
            server.Dispose();

            // assert
            logMock.Verify(x => x.Dispose(), Times.Once());
            protocolMock.Verify(x => x.Dispose(), Times.Once());

            // cleanup
            scheduler.Dispose();
        }
Exemple #23
0
        public void Schedule()
        {
            // arrange
            var loop    = new EventLoop();
            var wait    = new AutoResetEvent(false);
            var counter = 0;

            // act
            loop.Schedule(() => counter++);
            loop.Schedule(() => counter++);
            loop.Start(() => wait.Set());
            loop.Schedule(() => counter++);

            // assert
            Assert.That(() => wait.WaitOne(100), Is.True);
            Assert.That(counter, Is.EqualTo(3));

            // cleanup
            loop.Dispose();
            wait.Dispose();
        }
Exemple #24
0
        public void TrackResourceCancel()
        {
            // arrange
            var cts       = new CancellationTokenSource();
            var token     = cts.Token;
            var loop      = new EventLoop();
            var cancelled = false;

            token.Register(() => { cancelled = true; });
            loop.TrackResource(token, new DisposeAction(() => { }));

            // act
            cts.Cancel();

            // assert
            Assert.That(cancelled, Is.True);

            // cleanup
            loop.Dispose();
            cts.Dispose();
        }
        public void SetTimeoutCancel()
        {
            // arrange
            var loop = new EventLoop();

            loop.Start(() => { });
            var callbackinvoked = new ManualResetEvent(false);
            var callback        = new Action(() => callbackinvoked.Set());
            var timeout         = TimeSpan.FromMilliseconds(100);

            // act
            var timer = loop.SetTimeout(callback, timeout);

            timer.Cancel();

            // assert
            Assert.That(callbackinvoked.WaitOne(timeout + timeout), Is.False);

            // cleanup
            loop.Dispose();
            callbackinvoked.Dispose();
        }
Exemple #26
0
        public void TrackResourceCancel()
        {
            // arrange
            var cts = new CancellationTokenSource();
            var token = cts.Token;
            var loop = new EventLoop();
            var cancelled = false;
            token.Register(() => { cancelled = true; });
            loop.TrackResource(token, new DisposeAction(() => { }));

            // act
            cts.Cancel();

            // assert
            Assert.That(cancelled, Is.True);

            // cleanup
            loop.Dispose();
            cts.Dispose();
        }
Exemple #27
0
        public void TrackResourceUntrack()
        {
            // arrange
            var cts = new CancellationTokenSource();
            var token = cts.Token;
            var loop = new EventLoop();
            var disposed = false;
            var disposer = new DisposeAction(() => { disposed = true; });
            var untrack = loop.TrackResource(token, disposer);

            // assert
            Assert.That(untrack(token), Is.True, "Expected the resource to be untracked");
            Assert.That(untrack(token), Is.False, "Expected the resource to be untracked already");

            // dispose the loop
            loop.Dispose();
            Assert.That(disposed, Is.False);

            // cleanup
            loop.Dispose();
            cts.Dispose();
        }
Exemple #28
0
        public void ThrowIfDisposed()
        {
            // arrange
            var loop = new EventLoop();

            // act
            loop.Start(() => { });
            loop.Dispose();

            // assert
            Assert.That(() => loop.Start(() => { }), Throws.InstanceOf<ObjectDisposedException>());
        }
Exemple #29
0
        public void TrackResourceDispose()
        {
            // arrange
            var cts = new CancellationTokenSource();
            var token = cts.Token;
            var loop = new EventLoop();
            var disposed = false;
            loop.TrackResource(token, new DisposeAction(() => { disposed = true; }));

            // act
            loop.Dispose();

            // assert
            Assert.That(disposed, Is.True);

            // cleanup
            loop.Dispose();
            cts.Dispose();
        }