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); }