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.

62 lines
2.2KB

  1. using System;
  2. using System.Collections.Generic;
  3. namespace Svelto.Context
  4. {
  5. class ContextNotifier: IContextNotifer
  6. {
  7. public ContextNotifier()
  8. {
  9. _toInitialize = new List<WeakReference<IWaitForFrameworkInitialization>>();
  10. _toDeinitialize = new List<WeakReference<IWaitForFrameworkDestruction>> ();
  11. }
  12. /// <summary>
  13. /// A Context is meant to be initialized only once in its timelife
  14. /// </summary>
  15. public void NotifyFrameworkInitialized()
  16. {
  17. foreach (WeakReference<IWaitForFrameworkInitialization> obj in _toInitialize)
  18. {
  19. if (obj.IsAlive == true)
  20. obj.Target.OnFrameworkInitialized();
  21. }
  22. _toInitialize = null;
  23. }
  24. /// <summary>
  25. /// A Context is meant to be deinitialized only once in its timelife
  26. /// </summary>
  27. public void NotifyFrameworkDeinitialized()
  28. {
  29. foreach (WeakReference<IWaitForFrameworkDestruction> obj in _toDeinitialize)
  30. {
  31. if (obj.IsAlive == true)
  32. obj.Target.OnFrameworkDestroyed();
  33. }
  34. _toDeinitialize = null;
  35. }
  36. public void AddFrameworkInitializationListener(IWaitForFrameworkInitialization obj)
  37. {
  38. if (_toInitialize != null)
  39. _toInitialize.Add(new WeakReference<IWaitForFrameworkInitialization>(obj));
  40. else
  41. throw new Exception("An object is expected to be initialized after the framework has been initialized. Type: " + obj.GetType());
  42. }
  43. public void AddFrameworkDestructionListener(IWaitForFrameworkDestruction obj)
  44. {
  45. if (_toDeinitialize != null)
  46. _toDeinitialize.Add(new WeakReference<IWaitForFrameworkDestruction>(obj));
  47. else
  48. throw new Exception("An object is expected to be initialized after the framework has been deinitialized. Type: " + obj.GetType());
  49. }
  50. List<WeakReference<IWaitForFrameworkInitialization>> _toInitialize;
  51. List<WeakReference<IWaitForFrameworkDestruction>> _toDeinitialize;
  52. }
  53. }