Beispiel #1
0
        public void EventQueue_Dequeue()
        {
            var queue = new EventQueue();

            queue.Enqueue(new Event("id", "value"));

            Assert.IsTrue(queue.TryDequeue(out var dequeued));
        }
Beispiel #2
0
        /// <summary>
        /// Moves to the next event.
        /// </summary>
        /// <returns>Returns true if there are more events available, otherwise returns false.</returns>
        public bool MoveNext()
        {
            // No events after the end of the stream or error.
            if (state == ParserState.StreamEnd)
            {
                Current = null;
                return false;
            }
            else if (pendingEvents.Count == 0)
            {
                // Generate the next event.
                pendingEvents.Enqueue(StateMachine());
            }

            Current = pendingEvents.Dequeue();
            return true;
        }
 protected BaseEventQueueTester()
 {
     // 1) arrange
     queue      = new EventQueue();
     pluginName = "TeoVincent";
     e          = new Event_Mock();
     queue.Enqueue(pluginName, e);
 }
        public async Task TestReceiveEventWithoutWaiting()
        {
            int notificationCount = 0;
            var tcs    = new TaskCompletionSource <bool>();
            var logger = new TestOutputLogger(this.TestOutput, false);
            var machineStateManager = new MockMachineStateManager(logger,
                                                                  (notification, evt, _) =>
            {
                notificationCount++;
                if (notificationCount == 3)
                {
                    Assert.Equal(MockMachineStateManager.Notification.ReceiveEventWithoutWaiting, notification);
                    tcs.SetResult(true);
                }
            });

            var queue         = new EventQueue(machineStateManager);
            var enqueueStatus = queue.Enqueue(new E4(false), Guid.Empty, null);

            Assert.Equal(EnqueueStatus.EventHandlerRunning, enqueueStatus);
            Assert.Equal(1, queue.Size);

            enqueueStatus = queue.Enqueue(new E4(true), Guid.Empty, null);
            Assert.Equal(EnqueueStatus.EventHandlerRunning, enqueueStatus);
            Assert.Equal(2, queue.Size);

            var receivedEvent = await queue.ReceiveAsync(typeof(E4), evt => (evt as E4).Value);

            Assert.IsType <E4>(receivedEvent);
            Assert.True((receivedEvent as E4).Value);
            Assert.Equal(1, queue.Size);

            var(deqeueStatus, e, opGroupId, info) = queue.Dequeue();
            Assert.IsType <E4>(e);
            Assert.False((e as E4).Value);
            Assert.Equal(DequeueStatus.Success, deqeueStatus);
            Assert.Equal(0, queue.Size);

            (deqeueStatus, e, opGroupId, info) = queue.Dequeue();
            Assert.Equal(DequeueStatus.NotAvailable, deqeueStatus);
            Assert.Equal(0, queue.Size);

            await Task.WhenAny(tcs.Task, Task.Delay(500));

            Assert.True(tcs.Task.IsCompleted);
        }
Beispiel #5
0
 /// <summary>
 /// 投遞事件
 /// </summary>
 /// <param name="e"></param>
 internal void PostEvent(Event e)
 {
     eventLock.WaitOne();
     {
         eventQueue.Enqueue(e);
     }
     eventLock.ReleaseMutex();
 }
Beispiel #6
0
        public void EventQueue_Enqueue()
        {
            var queue = new EventQueue();

            queue.Enqueue(new Event("id", "value"));

            Assert.AreEqual(queue.Count, 1);
        }
Beispiel #7
0
 /// <summary>
 /// Queues an action to be run on the UI thread
 /// </summary>
 /// <param name="action"></param>
 public void QueueAction(Action action)
 {
     if (action is null)
     {
         throw new ArgumentNullException(nameof(action));
     }
     EventQueue.Enqueue(action);
 }
Beispiel #8
0
        public static void SendFill(this Strategy strategy, Order order)
        {
            var report = new ExecutionReport(order);

            report.ExecType  = ExecType.ExecTrade;
            report.DateTime  = DateTime.Now;
            report.OrdStatus = OrderStatus.Filled;
            report.CumQty    = order.Qty;
            report.LeavesQty = 0;
            report.LastPx    = order.Type == OrderType.Limit ? order.Price : order.Instrument.Trade?.Price ?? 0;
            report.LastQty   = order.Qty;
            var queue = new EventQueue(size: 10);

            queue.Enqueue(report);
            queue.Enqueue(new OnQueueClosed(queue));
            strategy.GetFramework().EventBus.ExecutionPipe.Add(queue);
        }
Beispiel #9
0
        public async Task TestEnqueueReceiveEventsAlternateType()
        {
            var logger = new TestOutputLogger(this.TestOutput, false);
            var machineStateManager = new MockMachineStateManager(logger,
                                                                  (notification, evt, _) => { });

            var queue       = new EventQueue(machineStateManager);
            int numMessages = 10000;

            var enqueueTask = Task.Run(() =>
            {
                for (int i = 0; i < numMessages; i++)
                {
                    if (i % 2 == 0)
                    {
                        queue.Enqueue(new E1(), Guid.Empty, null);
                    }
                    else
                    {
                        queue.Enqueue(new E2(), Guid.Empty, null);
                    }
                }
            });

            var receiveTask = Task.Run(async() =>
            {
                for (int i = 0; i < numMessages; i++)
                {
                    if (i % 2 == 0)
                    {
                        var e = await queue.ReceiveAsync(typeof(E1));
                        Assert.IsType <E1>(e);
                    }
                    else
                    {
                        var e = await queue.ReceiveAsync(typeof(E2));
                        Assert.IsType <E2>(e);
                    }
                }
            });

            await Task.WhenAny(Task.WhenAll(enqueueTask, receiveTask), Task.Delay(3000));

            Assert.True(enqueueTask.IsCompleted);
            Assert.True(receiveTask.IsCompleted);
        }
Beispiel #10
0
        private void AddProviderEventReminder(XProviderEventType type)
        {
            _logger.Debug($"{AgentId}, status={type}");
            TradingStatus = type;
            var reminder = new Reminder(OnMarketStatusEvent, DateTime.Now, type);

            reminder.SetClock(_eventClock);
            _eventQueue.Enqueue(reminder);
        }
 private Token GetCurrentToken()
 {
     if (currentToken == null)
     {
         while (scanner.MoveNextWithoutConsuming())
         {
             currentToken = scanner.Current;
             YamlDotNet.Core.Tokens.Comment comment = currentToken as YamlDotNet.Core.Tokens.Comment;
             if (comment == null)
             {
                 break;
             }
             pendingEvents.Enqueue(new YamlDotNet.Core.Events.Comment(comment.Value, comment.IsInline, comment.Start, comment.End));
             scanner.ConsumeCurrent();
         }
     }
     return(currentToken);
 }
Beispiel #12
0
 private void InitAccoutQueue()
 {
     if (IsExecutionProvider)
     {
         _accountQueue = new EventQueue(2, 0, 2, 100, framework.EventBus);
         _accountQueue.Enqueue(new OnQueueOpened(_accountQueue));
         framework.EventBus.ExecutionPipe.Add(_accountQueue);
     }
 }
Beispiel #13
0
        public void EventQueue_Dequeue_All()
        {
            var queue = new EventQueue();

            queue.Enqueue(new Event("id", "value"));
            queue.TryDequeue(out var dequeued);

            Assert.AreEqual(queue.Count, 0);
        }
Beispiel #14
0
        public void Post(string eventName,
                         object context = null)
        {
            var @event = _eventFactory.CreateEvent(eventName, context);

            lock (_lockObject)
            {
                _eventQueue.Enqueue(@event);
            }
        }
 private EventQueue GetEventQueue(Framework framework)
 {
     if (!_queues.TryGetValue(framework, out var queue))
     {
         queue = new EventQueue(size: 10, bus: framework.EventBus);
         queue.Enqueue(new OnQueueOpened(queue));
         framework.EventBus.ExecutionPipe.Add(queue);
     }
     return(queue);
 }
Beispiel #16
0
 void CreateTables()
 {
     for (var i = 0; i < DefaultParams.TablesPosition.Length; i++)
     {
         Tables[i] = new Table(DefaultParams.TablesPosition[i], TableState.EmptyTable);
         EventQueue.Enqueue(new EventData(Event.CreatedTable, new List <object> {
             DefaultParams.TablesPosition[i]
         }));
     }
 }
#pragma warning restore IDE0044, CS0649


        public void Execute(int index)
        {
            Events.Enqueue(new EcsTestData
            {
                value = _threadIndex
            });

            ThreadIds[index] = _threadIndex;
            ThreadUsages[_threadIndex]++;
        }
Beispiel #18
0
        public void EventQueue_Dequeue_Same()
        {
            var queue  = new EventQueue();
            var @event = new Event("id", "value");

            queue.Enqueue(@event);
            queue.TryDequeue(out var dequeued);

            Assert.AreSame(@event, dequeued);
        }
        //void Subscribe(Instrument instrument, DateTime dateTime1, DateTime dateTime2)
        //{
        //    Console.WriteLine("{0} {1}::Subscribe {2}", DateTime.Now, this.Name, instrument.Symbol);
        //    var info = new SubscribeInfo();
        //    info.DatePath = Path.Combine(DataPath, instrument.Symbol);
        //    info.DateTime1 = dateTime1;
        //    info.DateTime2 = dateTime2;
        //    info.InstrumentId = instrument.Id;
        //    info.SubscribeBidAsk = SubscribeBid && SubscribeAsk;
        //    info.SubscribeTrade = SubscribeTrade;

        //    var queue = new EventQueue(1, 0, 2, 0x61a8) {
        //        IsSynched = true
        //    };
        //    queue.Enqueue(new OnQueueOpened(queue));
        //    framework.EventBus.DataPipe.Add(queue);
        //    _dataSeries.Add(new DataSeriesObject(info, queue));
        //}

        void Subscribe(Instrument instrument, DateTime dateTime1, DateTime dateTime2)
        {
            Console.WriteLine("{0} {1}::Subscribe {2}", DateTime.Now, this.Name, instrument.Symbol);

            // 在这里一开始就加载完,需要一点时间,后期考虑将数据与回测结合起来使用
            ProtobufDataZeroReader reader = new ProtobufDataZeroReader();

            reader.DataPath_Instrument = DataPath_Instrument;
            reader.DataPath_Realtime   = DataPath_Realtime;

            reader.SubscribeExternData = SubscribeExternData;
            reader.SubscribeAsk        = SubscribeAsk;
            reader.SubscribeBid        = SubscribeBid;

            reader.GetDataSeries(instrument, dateTime1, dateTime2);
            IDataSeries Trades = null;
            IDataSeries Bids   = null;
            IDataSeries Asks   = null;

            if (SubscribeTrade || SubscribeBid || SubscribeAsk)
            {
                reader.OutputSeries(out Trades, out Bids, out Asks);
            }

            if (SubscribeTrade && Trades != null && Trades.Count > 0)
            {
                var queue = new EventQueue(1, 0, 2, 0x61a8)
                {
                    IsSynched = true
                };
                queue.Enqueue(new OnQueueOpened(queue));
                framework.EventBus.DataPipe.Add(queue);
                _dataSeries.Add(new DataSeriesObject(Trades, dateTime1, dateTime2, queue, this.Processor));
            }
            if (SubscribeBid && Bids != null && Bids.Count > 0)
            {
                var queue = new EventQueue(1, 0, 2, 0x61a8)
                {
                    IsSynched = true
                };
                queue.Enqueue(new OnQueueOpened(queue));
                framework.EventBus.DataPipe.Add(queue);
                _dataSeries.Add(new DataSeriesObject(Bids, dateTime1, dateTime2, queue, this.Processor));
            }
            if (SubscribeAsk && Asks != null && Asks.Count > 0)
            {
                var queue = new EventQueue(1, 0, 2, 0x61a8)
                {
                    IsSynched = true
                };
                queue.Enqueue(new OnQueueOpened(queue));
                framework.EventBus.DataPipe.Add(queue);
                _dataSeries.Add(new DataSeriesObject(Asks, dateTime1, dateTime2, queue, this.Processor));
            }
        }
Beispiel #20
0
        public void TestDequeueEvent()
        {
            var logger           = new TestOutputLogger(this.TestOutput, false);
            var mockActorManager = new MockActorManager(logger,
                                                        (notification, evt, _) => { });

            using (var queue = new EventQueue(mockActorManager))
            {
                var(deqeueStatus, e, opGroupId, info) = queue.Dequeue();
                Assert.Equal(DequeueStatus.NotAvailable, deqeueStatus);
                Assert.Equal(0, queue.Size);

                queue.Enqueue(new E1(), Guid.Empty, null);
                (deqeueStatus, e, opGroupId, info) = queue.Dequeue();
                Assert.IsType <E1>(e);
                Assert.Equal(DequeueStatus.Success, deqeueStatus);
                Assert.Equal(0, queue.Size);

                queue.Enqueue(new E3(), Guid.Empty, null);
                queue.Enqueue(new E2(), Guid.Empty, null);
                queue.Enqueue(new E1(), Guid.Empty, null);

                (deqeueStatus, e, opGroupId, info) = queue.Dequeue();
                Assert.IsType <E3>(e);
                Assert.Equal(DequeueStatus.Success, deqeueStatus);
                Assert.Equal(2, queue.Size);

                (deqeueStatus, e, opGroupId, info) = queue.Dequeue();
                Assert.IsType <E2>(e);
                Assert.Equal(DequeueStatus.Success, deqeueStatus);
                Assert.Equal(1, queue.Size);

                (deqeueStatus, e, opGroupId, info) = queue.Dequeue();
                Assert.IsType <E1>(e);
                Assert.Equal(DequeueStatus.Success, deqeueStatus);
                Assert.Equal(0, queue.Size);

                (deqeueStatus, e, opGroupId, info) = queue.Dequeue();
                Assert.Equal(DequeueStatus.NotAvailable, deqeueStatus);
                Assert.Equal(0, queue.Size);
            }
        }
Beispiel #21
0
 public void Attach(EventBus bus)
 {
     var q = new EventQueue(EventQueueId.Data, EventQueueType.Master, EventQueuePriority.Normal, 25600, null)
     {
         IsSynched = true,
         Name = $"attached {bus.framework.Name}"
     };
     q.Enqueue(new OnQueueOpened(q));
     bus.DataPipe.Add(q);
     this.attached[this.attachedCount++] = q;
 }
Beispiel #22
0
        public void ThenTheCounterReflectsTheNumberOfEvents()
        {
            var eventQueue = new EventQueue();

            eventQueue.Enqueue(new TestEvent());

            eventQueue
            .Count
            .Should()
            .Be(1);
        }
Beispiel #23
0
        private static void PlayerVsCpu()
        {
            var player = new Player {
                Name = GetInput("Enter player name", ".+")
            };
            var cpu = new Player {
                Name = "CPU"
            };

            var options = new GameConfig
            {
                Players = new[]
                {
                    player,
                    cpu
                }
            }
            .WithMapHeight(10)
            .WithMapWidth(10);

            var gameState = new Game(options);

            //Init
            Draw(player.Map, cpu.Map, true);

            var shipCountPerPlayer = GetInput <uint>("Enter number of ships for this game", "10|[1-9]");

            for (var i = 0; i < shipCountPerPlayer; i++)
            {
                SetPlayerAndCpuShip(player, cpu);
            }

            while (player.Map.HasActiveShips || cpu.Map.HasActiveShips)
            {
                EventQueue.Enqueue(Console.Clear);
                EventQueue.Enqueue(() => Draw(player.Map, cpu.Map, true));

                if (!cpu.Map.Fire(player, GetCoordinate()))
                {
                    EventQueue.Enqueue(() => Info($"{player.Name} miss"));
                }

                //Cpu fire
                var availableShots = player.Map.TileDictionary.Where(t => t.Value.Status == TileStatus.OpenOcean || t.Value.Status == TileStatus.Ship).ToArray();
                var coordinate     = availableShots[new Random().Next(0, availableShots.Length - 1)].Key;

                if (!player.Map.Fire(cpu, coordinate))
                {
                    EventQueue.Enqueue(() => Info($"{cpu.Name} miss"));
                }

                DoEvents();
            }
        }
Beispiel #24
0
Datei: Hub.cs Projekt: S17L/iGP11
        public async Task DeliverAsync(HubClientEvent hubClientEvent)
        {
            var endpointIds = hubClientEvent.RecipientId.HasValue
                                  ? new[] { hubClientEvent.RecipientId.Value }
                                  : GetEndpointIds(hubClientEvent.Event.TypeId);

            var hubEvent = new HubEvent(hubClientEvent.Event, endpointIds);
            await _hubEventRepository.UpdateAsync(hubEvent);

            _queue.Enqueue(hubEvent);
        }
Beispiel #25
0
 public void PumpAutoStopsOnRunFinished()
 {
     EventQueue q = new EventQueue();
     EventPump pump = new EventPump( NullListener.NULL, q, true );
     Assert.IsFalse( pump.Pumping, "Should not be pumping initially" );
     StartPump( pump, 1000 );
     Assert.IsTrue( pump.Pumping, "Pump failed to start" );
     q.Enqueue( new RunFinishedEvent( new Exception() ) );
     WaitForPumpToStop( pump, 1000 );
     Assert.IsFalse( pump.Pumping, "Pump failed to stop" );
 }
Beispiel #26
0
        public void Run(bool predictive)
        {
            foreach (var evt in Events)
            {
                EventQueue.Enqueue(evt);
            }

            Events.Clear();
            HetNet.Instance.Reset();
            ServeEventQueue(predictive);
        }
Beispiel #27
0
        private void QueueReceivedMessages()
        {
            while (!_token.IsCancellationRequested)
            {
                try
                {
                    _eventQueue.Enqueue(new InteractorMessageEventArgs(this, ReceiveMessage()));
                }
                catch (OperationCanceledException)
                {
                    break;
                }
                catch (Exception error)
                {
                    _eventQueue.Enqueue(new InteractorErrorEventArgs(this, error));
                    break;
                }
            }

            Log.Debug($"Exited read loop for {this}");
        }
Beispiel #28
0
    /// <summary>
    /// 异步的连接过程完成了。
    /// </summary>
    /// <param name="result"></param>
    private void FinishConnect(IAsyncResult result)
    {
        Log(Name, string.Format("结束连接服务器,时间:{0}", DataTime2String(DateTime.Now)));

        var client = result.AsyncState as TcpClient;

        if (EnableConnectTimeOut)
        {
            if (DateTime.Now.Ticks - ConnectStartTime.Ticks > ConnectTimeOut * 1000 * 10000)
            {
                LogError(Name, "连接超时,无法连上服务器");
                EventQueue.Enqueue(new Event {
                    Type = EventType.CanNotConnect
                });
                return;
            }
        }

        if (client == null)
        {
            LogError(Name, "TcpClient == null 连接失败!");
        }
        else
        {
            try
            {
                client.EndConnect(result);
            }
            catch (Exception exception)
            {
                LogError(Name, string.Format("{0},{1}", exception.Message, exception.StackTrace));
            }

            if (client.Connected)
            {
                Log(Name, string.Format("连上服务器了,时间:{0}", DataTime2String(DateTime.Now)));
                HasConnectedToServer = true;
                LastClientHeartBeat  = DateTime.Now;
                LastServerHeartBeat  = DateTime.Now;
                IsWriting            = false;
                IsReading            = false;
                EventQueue.Enqueue(new Event {
                    Type = EventType.Connected
                });
            }
            else
            {
                LogError(Name, "本次连接失败,等3秒,我再尝试连接");
                Thread.Sleep(3 * 1000);
                Connect();
            }
        }
    }
Beispiel #29
0
        public void PumpAutoStopsOnRunFinished()
        {
            EventQueue q    = new EventQueue();
            EventPump  pump = new EventPump(NullListener.NULL, q, true);

            Assert.IsFalse(pump.Pumping, "Should not be pumping initially");
            StartPump(pump, 1000);
            Assert.IsTrue(pump.Pumping, "Pump failed to start");
            q.Enqueue(new RunFinishedEvent(new Exception()));
            WaitForPumpToStop(pump, 1000);
            Assert.IsFalse(pump.Pumping, "Pump failed to stop");
        }
        public void PumpAutoStopsOnRunFinished()
        {
            EventQueue q    = new EventQueue();
            EventPump  pump = new EventPump(NullListener.NULL, q, true);

            Assert.That(pump.PumpState, Is.EqualTo(EventPumpState.Stopped));
            StartPump(pump, 1000);
            Assert.That(pump.PumpState, Is.EqualTo(EventPumpState.Pumping));
            q.Enqueue(new RunFinishedEvent(new Exception()));
            WaitForPumpToStop(pump, 1000);
            Assert.That(pump.PumpState, Is.EqualTo(EventPumpState.Stopped));
        }
Beispiel #31
0
    // public static async Task<GameScript> LoadAsync(
    //     IEnumerable<ScriptFile> sources,
    //     IScriptCompiler compiler)
    // {
    //     // TODO Dispose ScriptRunner
    //     using var scriptRunner = compiler.Compile<Game>(sources);

    //     EventQueue eventQueue = new();

    //     var game = new Game(eventQueue);

    //     await scriptRunner.RunAsync(game);

    //     return new GameScript(game, eventQueue);
    // }

    public Task RunAsync(IMediator mediator, GameState?gameState = null)
    {
        // Filter event queue while setting up the game. Only ProtagonistChanged
        // and RoomEntered should be sent to the UI when the game starts.
        _eventQueue.IgnoreAll();

        // Runs the OnGameStart callback in the game script.
        _game.Start();

        // From this point on, allow all events to go to the UI.
        _eventQueue.AllowAll();

        // We do need to make sure that the startup script has at least set
        // a protagonist and room.
        if (_game.Protagonist is null)
        {
            throw new InvalidOperationException(
                      "Startup script must set a protagonist.");
        }
        if (_game.CurrentRoom is null)
        {
            throw new InvalidOperationException(
                      "Startup script must enter a room.");
        }

        // Save the initial state so we've got something to compare to when
        // saving the game.
        _initialState = _game.Save();

        if (gameState is not null)
        {
            _game.Load(gameState);
        }

        _eventQueue.Enqueue(new GameStarted(_game));
        _eventQueue.Enqueue(new ProtagonistChanged(_game.Protagonist !));
        _eventQueue.Enqueue(new RoomEntered(_game.CurrentRoom !));

        return(_eventQueue.FlushAsync(mediator));
    }
Beispiel #32
0
        private void IncrementInitialisationState()
        {
            if (InitialisationCount == INITIALISATION_COUNT_MAX)
            {
                return;
            }

            InitialisationCount++;
            if (InitialisationCount == INITIALISATION_COUNT_MAX)
            {
                EventQueue.Enqueue(new ManagerEvent(ManagerEventType.ConnectionComplete));
            }
        }
 protected override void OnConnected()
 {
     foreach (var s in Series)
     {
         var q = new EventQueue(EventQueueId.Data, EventQueueType.Master, EventQueuePriority.Normal, 25600, null)
         {
             IsSynched = true,
             Name = s.Name
         };
         q.Enqueue(new OnQueueOpened(q));
         this.framework.EventBus.DataPipe.Add(q);
         this.emitters.Add(new DataSeriesObject(s, DateTime1, DateTime2, q, Processor));
     }
 }
 private DataSeriesObject CreateDataSeriesEmitter(DataSeries series, DateTime dateTime1, DateTime dateTime2)
 {
     var q = new EventQueue(EventQueueId.Data, EventQueueType.Master, EventQueuePriority.Normal, 25600, null)
     {
         IsSynched = true,
         Name = series.Name
     };
     q.Enqueue(new OnQueueOpened(q));
     this.framework.EventBus.DataPipe.Add(q);
     return new DataSeriesObject(series, dateTime1, dateTime2, q, Processor);
 }
Beispiel #35
0
 protected virtual EventQueueNode DoSchedule(DateTime date, Event @event) {
   if (ScheduleQ.MaxSize == ScheduleQ.Count) {
     // the capacity has to be adjusted, there are more events in the queue than anticipated
     var oldSchedule = ScheduleQ;
     ScheduleQ = new EventQueue(ScheduleQ.MaxSize * 2);
     foreach (var e in oldSchedule) ScheduleQ.Enqueue(e.Priority, e.Event);
   }
   return ScheduleQ.Enqueue(date, @event);
 }
        public void PumpSynchronousAndAsynchronousEvents()
        {
            EventQueue q = new EventQueue();
            using (EventPump pump = new EventPump(NullListener.NULL, q, false))
            {
                pump.Name = "PumpSynchronousAndAsynchronousEvents";
                pump.Start();

                int numberOfAsynchronousEvents = 0;
                int sumOfAsynchronousQueueLength = 0;
                const int Repetitions = 2;
                for (int i = 0; i < Repetitions; i++)
                {
                    foreach (Event e in events)
                    {
                        q.Enqueue(e);
                        if (e.IsSynchronous)
                        {
                            Assert.That(q.Count, Is.EqualTo(0));
                        }
                        else
                        {
                            sumOfAsynchronousQueueLength += q.Count;
                            numberOfAsynchronousEvents++;
                        }
                    }
                }

                Console.WriteLine("Average queue length: {0}", (float)sumOfAsynchronousQueueLength / numberOfAsynchronousEvents);
            }
        }
        public void PumpPendingEventsAfterAutoStop()
        {
            EventQueue q = new EventQueue();
            EnqueueEvents(q);
            Event[] eventsAfterStop =
            {
                new OutputEvent(new TestOutput("foo", TestOutputType.Out)),
                new OutputEvent(new TestOutput("bar", TestOutputType.Trace)),
            };
            foreach (Event e in eventsAfterStop)
            {
                q.Enqueue(e);
            }

            QueuingEventListener el = new QueuingEventListener();
            using (EventPump pump = new EventPump(el, q, true))
            {
                pump.Name = "PumpPendingEventsAfterAutoStop";
                pump.Start();
                int tries = 10;
                while (--tries > 0 && q.Count > 0)
                {
                    Thread.Sleep(100);
                }

                Assert.That(pump.PumpState, Is.EqualTo(EventPumpState.Stopped));
            }
            Assert.That(el.Events.Count, Is.EqualTo(events.Length + eventsAfterStop.Length));
        }
 public void PumpAutoStopsOnRunFinished()
 {
     EventQueue q = new EventQueue();
     using (EventPump pump = new EventPump(NullListener.NULL, q, true))
     {
         pump.Name = "PumpAutoStopsOnRunFinished";
         Assert.That(pump.PumpState, Is.EqualTo(EventPumpState.Stopped));
         StartPump(pump, 1000);
         Assert.That(pump.PumpState, Is.EqualTo(EventPumpState.Pumping));
         q.Enqueue(new RunFinishedEvent(new Exception()));
         WaitForPumpToStop(pump, 1000);
         Assert.That(pump.PumpState, Is.EqualTo(EventPumpState.Stopped));
     }
 }
 private static void EnqueueEvents(EventQueue q)
 {
     foreach (Event e in events)
         q.Enqueue(e);
 }
        public void Run()
        {
            this.thread = new Thread(() =>
            {
                Console.WriteLine($"{DateTime.Now} Data simulator thread started");
                if (!IsConnected)
                    Connect();

                var q = new EventQueue(EventQueueId.Data, EventQueueType.Master, EventQueuePriority.Normal, 16, null)
                {
                    Name = "Data Simulator Start Queue",
                    IsSynched = true
                };
                q.Enqueue(new OnQueueOpened(q));
                q.Enqueue(new OnSimulatorStart(DateTime1, DateTime2, 0));
                q.Enqueue(new OnQueueClosed(q));
                this.framework.EventBus.DataPipe.Add(q);

                this.running = true;
                this.exit = false;
                while (!this.exit)
                {
                    LinkedListNode<DataSeriesObject> lastNode = null;
                    var node = this.emitters.First;
                    while (node != null)
                    {
                        var emitter = node.Data;
                        if (!emitter.Done)
                        {
                            if (emitter.Enqueue())
                                this.objCount++;
                            lastNode = node;
                        }
                        else
                        {
                            if (lastNode == null)
                                this.emitters.First = node.Next;
                            else
                                lastNode.Next = node.Next;
                            this.emitters.Count--;
                            emitter.dataQueue.Enqueue(new OnQueueClosed(emitter.dataQueue));
                        }
                        node = node.Next;
                    }
                }
                this.exit = false;
                this.running = false;

                Console.WriteLine($"{DateTime.Now} Data simulator thread stopped");
            })
            {
                Name = "Data Simulator Thread",
                IsBackground = true
            };
            this.thread.Start();
        }