ActorMessageSenderComponent.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using System;
  2. using System.Collections.Generic;
  3. namespace ETModel
  4. {
  5. public class ActorMessageSenderComponent: Component
  6. {
  7. public readonly Dictionary<long, ActorMessageSender> ActorMessageSenders = new Dictionary<long, ActorMessageSender>();
  8. public override void Dispose()
  9. {
  10. if (this.IsDisposed)
  11. {
  12. return;
  13. }
  14. base.Dispose();
  15. foreach (ActorMessageSender actorMessageSender in this.ActorMessageSenders.Values)
  16. {
  17. actorMessageSender.Dispose();
  18. }
  19. this.ActorMessageSenders.Clear();
  20. }
  21. public ActorMessageSender Get(long id)
  22. {
  23. if (id == 0)
  24. {
  25. throw new Exception($"actor id is 0");
  26. }
  27. if (this.ActorMessageSenders.TryGetValue(id, out ActorMessageSender actorMessageSender))
  28. {
  29. return actorMessageSender;
  30. }
  31. actorMessageSender = ComponentFactory.CreateWithId<ActorMessageSender>(id);
  32. actorMessageSender.Parent = this;
  33. this.ActorMessageSenders[id] = actorMessageSender;
  34. return actorMessageSender;
  35. }
  36. public ActorMessageSender GetWithActorId(long actorId)
  37. {
  38. if (actorId == 0)
  39. {
  40. throw new Exception($"actor id is 0");
  41. }
  42. if (this.ActorMessageSenders.TryGetValue(actorId, out ActorMessageSender actorMessageSender))
  43. {
  44. return actorMessageSender;
  45. }
  46. actorMessageSender = ComponentFactory.CreateWithId<ActorMessageSender, long>(actorId, actorId);
  47. actorMessageSender.Parent = this;
  48. this.ActorMessageSenders[actorId] = actorMessageSender;
  49. return actorMessageSender;
  50. }
  51. public void Remove(long id)
  52. {
  53. ActorMessageSender actorMessageSender;
  54. if (!this.ActorMessageSenders.TryGetValue(id, out actorMessageSender))
  55. {
  56. return;
  57. }
  58. this.ActorMessageSenders.Remove(id);
  59. actorMessageSender.Dispose();
  60. }
  61. }
  62. }