public void AddEventListener(DataBaseEvents eventName, DataBaseEventListener listener) { this.dispatcher.Invoke(() => { if (this.listenerHosts.ContainsKey(eventName) == true) { if (this.listeners.ContainsKey(eventName) == false) { this.listeners[eventName] = new DataBaseEventListenerCollection(); } this.listeners[eventName].Add(listener); var dataBases = this.cremaHost.Dispatcher.Invoke(() => this.cremaHost.DataBases.Where(item => item.IsLoaded).ToArray()); var listenerHost = this.listenerHosts[eventName]; foreach (var item in dataBases) { listenerHost.Subscribe(item, listener); } } else { throw new NotImplementedException(); } }); }
private void RemoveDataBaseEventListener(DataBaseEvents eventName, DataBaseEventListener listener) { if (this.Context.Properties[typeof(DataBaseEventListenerContext)] is DataBaseEventListenerContext context) { context.RemoveEventListener(eventName, listener); } else { throw new NotImplementedException(); } }
public void Unsubscribe(IDataBase dataBase, DataBaseEventListener listener) { var listeners = this.dataBaseToListeners[dataBase]; listeners.Remove(listener); if (listeners.Any() == false) { this.OnUnsubscribe(dataBase); this.dataBaseToListeners.Remove(dataBase); } }
public void Subscribe(IDataBase dataBase, DataBaseEventListener listener) { if (this.dataBaseToListeners.ContainsKey(dataBase) == false) { this.dataBaseToListeners[dataBase] = new DataBaseEventListenerCollection(); } var listeners = this.dataBaseToListeners[dataBase]; if (listeners.Any() == false) { this.OnSubscribe(dataBase); } listeners.Add(listener); }
private void AddDataBaseEventListener(DataBaseEvents eventName, DataBaseEventListener listener) { if (this.Context.Properties.ContainsKey(typeof(DataBaseEventListenerContext)) == false) { this.eventListenerContext = new DataBaseEventListenerContext(this.cremaHost, this.eventListeners); this.Context.Properties[typeof(DataBaseEventListenerContext)] = this.eventListenerContext; } if (this.eventListenerContext != null) { this.eventListenerContext.AddEventListenerAsync(eventName, listener); } else { throw new NotImplementedException(); } }