예제 #1
0
        protected sealed override async Task StartEventReceiverAsync(IEventSource eventSource, CancellationToken cancellationToken = default)
        {
            if (eventSource == null)
            {
                throw new ArgumentNullException(nameof(eventSource));
            }
            if (!(eventSource is MonitoredDatabase monitoredDatabase))
            {
                throw new InvalidOperationException($"Поддерживается только {typeof(MonitoredDatabase)}");
            }

            if (EventReceivers.TryGetValue(monitoredDatabase, out _))
            {
                throw new InvalidOperationException($"БД {monitoredDatabase} уже добавлена в список и прослушивается.");
            }

            var dbEventListenerLogger = LoggerFactory.CreateLogger <DbEventReceiver>();

            var dbEventListener = new DbEventReceiver(
                EventReceiverOptions,
                monitoredDatabase,
                dbEventListenerLogger);

            // подпишемся на события в этой БД и запустим слушателя
            dbEventListener.OnEventReceived += HandleDbEventReceived;

            await dbEventListener.StartAsync(cancellationToken);

            // добавим слушателя в список, чтобы потом корректно завершить работу
            EventReceivers[monitoredDatabase] = dbEventListener;
        }
 /// <summary>Raises game event of given type, with given content, send at given eventreceivers.</summary>
 public static void RaiseGameEvent(string nameOfEvent, object content, EventReceivers receivers, bool sendReliable = true)
 {
     eventHandler.RaiseGameEvent(nameOfEvent, content, (ReceiverGroup)receivers, sendReliable);
 }