NumericWatcherComponent.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using System;
  2. using System.Collections.Generic;
  3. namespace Model
  4. {
  5. [ObjectEvent]
  6. public class NumericWatcherComponentEvent : ObjectEvent<NumericWatcherComponent>, IAwake, ILoad
  7. {
  8. public void Awake()
  9. {
  10. this.Get().Awake();
  11. }
  12. public void Load()
  13. {
  14. this.Get().Load();
  15. }
  16. }
  17. /// <summary>
  18. /// 监视数值变化组件,分发监听
  19. /// </summary>
  20. public class NumericWatcherComponent : Component
  21. {
  22. private Dictionary<NumericType, List<INumericWatcher>> allWatchers;
  23. public void Awake()
  24. {
  25. this.Load();
  26. }
  27. public void Load()
  28. {
  29. this.allWatchers = new Dictionary<NumericType, List<INumericWatcher>>();
  30. Type[] types = DllHelper.GetMonoTypes();
  31. foreach (Type type in types)
  32. {
  33. object[] attrs = type.GetCustomAttributes(typeof(NumericWatcherAttribute), false);
  34. foreach (object attr in attrs)
  35. {
  36. NumericWatcherAttribute numericWatcherAttribute = (NumericWatcherAttribute)attr;
  37. INumericWatcher obj = (INumericWatcher)Activator.CreateInstance(type);
  38. if (!this.allWatchers.ContainsKey(numericWatcherAttribute.NumericType))
  39. {
  40. this.allWatchers.Add(numericWatcherAttribute.NumericType, new List<INumericWatcher>());
  41. }
  42. this.allWatchers[numericWatcherAttribute.NumericType].Add(obj);
  43. }
  44. }
  45. }
  46. public void Run(NumericType numericType, long id, int value)
  47. {
  48. List<INumericWatcher> list;
  49. if (!this.allWatchers.TryGetValue(numericType, out list))
  50. {
  51. return;
  52. }
  53. foreach (INumericWatcher numericWatcher in list)
  54. {
  55. numericWatcher.Run(id, value);
  56. }
  57. }
  58. }
  59. }