Exemple #1
0
        /// <summary>
        /// See <see cref="IDssEventProcessorPlugin.ReadOrCreateEventStream(DateTime)"/>
        /// </summary>
        public void ReadOrCreateEventStream(DateTime date)
        {
            // We already have an event stream for the current day, so just use this
            if (_eventStream != null && Span.IsIncluded(date))
            {
                return;
            }

            // We have reached the day boundary - save the current event stream and create a new one for the new day
            if (_eventStream != null && !Span.IsIncluded(date))
            {
                SaveEventStreamToDb();
            }

            using (var scope = _serviceScopeFactory.CreateScope())
                using (var dbContext = scope.ServiceProvider.GetRequiredService <IDigitalstromDbContext>())
                {
                    var dbSceneEvents = dbContext.DsSceneEventDataSet.Where(x => x.Key == date).FirstOrDefault();
                    if (dbSceneEvents != null)
                    {
                        _eventStream = dbSceneEvents.EventStream;
                    }
                    else
                    {
                        _eventStream = new EventTimeSeriesStream <DssEvent, DssSceneEventSerializer>(new TimeSeriesSpan(date, date.AddDays(1), DigitalstromSceneEventData.MaxEventsPerDay));
                    }
                }
        }
        public void TestEventTimeSeriesStreamIntSeries()
        {
            using var eventstream = new EventTimeSeriesStream <Tuple <DateTime, int>, EventValueSerializer <int> >(span);

            var expectedEmpty = Enumerable.Range(0, count).SelectMany(x => new byte[] { 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }).ToArray();

            Assert.Equal(expectedEmpty, eventstream.ToByteArray());

            eventstream.WriteEvent(new Tuple <DateTime, int>(begin.AddSeconds(3), 42));

            var expected1Item = Enumerable.Range(0, count).SelectMany(x => x == 0 ? new byte[] { 0xb8, 0x0b, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00 } :
                                                                      new byte[] { 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }).ToArray();

            Assert.Equal(expected1Item, eventstream.ToByteArray());

            eventstream.WriteEvent(new Tuple <DateTime, int>(begin.AddSeconds(7), -1));

            var expected2Item = Enumerable.Range(0, count).SelectMany(x => x == 0 ? new byte[] { 0xb8, 0x0b, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00 } :
                                                                      x == 1 ? new byte[] { 0x58, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff } :
                                                                      new byte[] { 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }).ToArray();

            Assert.Equal(expected2Item, eventstream.ToByteArray());

            for (int i = 0; i < 8; i++)
            {
                eventstream.WriteEvent(new Tuple <DateTime, int>(begin.AddSeconds(7).AddMilliseconds(i + 1), -1));
            }

            var expected10Items = Enumerable.Range(0, count).SelectMany(x => x == 0 ? new byte[] { 0xb8, 0x0b, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00 } :
                                                                        new byte[] { (byte)(0x57 + x), 0x1b, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff }).ToArray();

            Assert.Equal(expected10Items, eventstream.ToByteArray());
        }
        public void TestEventTimeSeriesStreamIntValues(int value)
        {
            using var eventstream = new EventTimeSeriesStream <Tuple <DateTime, int>, EventValueSerializer <int> >(span);

            for (int i = 0; i < count; i++)
            {
                eventstream.WriteEvent(new Tuple <DateTime, int>(begin.AddSeconds(7).AddMilliseconds(i + 1), value));
            }

            var bytes = eventstream.ToByteArray();

            Assert.NotNull(bytes);

            var neweventstream = EventTimeSeriesStream <Tuple <DateTime, int>, EventValueSerializer <int> > .FromByteArray(span, bytes !);

            Assert.Equal(count, neweventstream.Count());

            foreach (var item in neweventstream)
            {
                Assert.Equal(value, item.Item2);
            }
        }