Ejemplo n.º 1
0
        public async Task RunAsync(CancellationToken token)
        {
            while (token.IsCancellationRequested == false)
            {
                EventSummary summary = await _queue.DequeueAsync(token);

                try
                {
                    using (var session = da.SessionFactory.OpenStatelessSession())
                        using (var txn = session.BeginTransaction())
                        {
                            foreach (ushort Code in summary.RecoverEvents)
                            {
                                await RecoverEventAsync(session, summary, Code, token);
                            }


                            foreach (ushort Code in summary.NewEvents)
                            {
                                EventMap map = await session.GetAsync <EventMap>(Code, token);

                                if (map == null)
                                {
                                    _logger.Warn($"DB상에 존재하지 않는 이벤트 코드입니다. 이벤트 코드:{Code}");
                                    continue;
                                }

                                DeviceEvent ae = new DeviceEvent();

                                byte[] descBuffer = Encoding.UTF8.GetBytes(map.Description);
                                ae.DeviceName     = summary.DeviceName;
                                ae.EventId        = CreateEventId(session, summary, Code);
                                ae.EventCode      = Code;
                                ae.OccurTimestamp = summary.GetTimestamp();
                                ae.siteId         = summary.SiteId;
                                await session.InsertAsync(ae, token);
                            }


                            await txn.CommitAsync(token);
                        }
                }
                catch (Exception ex)
                {
                    _logger.Error(ex);
                }
            }
            _logger.Info("Abort RunAsync");
        }
Ejemplo n.º 2
0
        private async Task RecoverEventAsync(NHibernate.IStatelessSession session, EventSummary summary, ushort Code, CancellationToken token)
        {
            int         num      = 0;
            ActiveEvent newEvt   = null;
            string      newEvtId = null;

            while (true)
            {
                newEvtId = $"{summary.SiteId}.{summary.DeviceName}.{Code}.{num++}";
                newEvt   = session.Get <ActiveEvent>(newEvtId);
                if (newEvt != null && newEvt.HasRecovered == false)
                {
                    newEvt.RecoverTimestamp = summary.GetTimestamp();
                    newEvt.HasRecovered     = true;
                    await session.UpdateAsync(newEvt, token);
                }
                else if (newEvt == null)
                {
                    break;
                }
            }
        }