Mirror of Svelto.ECS because we're a fan of it
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
1.3KB

  1. using System;
  2. using System.Collections.Generic;
  3. namespace Svelto.ServiceLayer.Experimental
  4. {
  5. public abstract class ServiceEventContainer : IServiceEventContainer
  6. {
  7. public void Dispose()
  8. {
  9. foreach (var listener in _listeners)
  10. {
  11. listener.Dispose();
  12. }
  13. _listeners.Clear();
  14. }
  15. protected ServiceEventContainer()
  16. {
  17. //call all the AddRelation in the implementation if you wish
  18. }
  19. public void ListenTo<TListener, TDelegate>(TDelegate callBack)
  20. where TListener : class, IServiceEventListener<TDelegate> where TDelegate : Delegate
  21. {
  22. var concreteType = _registeredTypes[typeof(TListener)];
  23. var listener = (TListener)Activator.CreateInstance(concreteType);
  24. listener.SetCallback(callBack);
  25. _listeners.Add(listener);
  26. }
  27. protected void AddRelation<TInterface, TConcrete>() where TInterface : IServiceEventListenerBase
  28. where TConcrete : TInterface
  29. {
  30. _registeredTypes.Add(typeof(TInterface), typeof(TConcrete));
  31. }
  32. readonly List<IServiceEventListenerBase> _listeners = new List<IServiceEventListenerBase>();
  33. readonly Dictionary<Type, Type> _registeredTypes = new Dictionary<Type, Type>();
  34. }
  35. }