using System; using System.Collections.Generic; namespace ETModel { public class ActorMessageSenderComponent: Component { public readonly Dictionary ActorMessageSenders = new Dictionary(); public override void Dispose() { if (this.IsDisposed) { return; } base.Dispose(); foreach (ActorMessageSender actorMessageSender in this.ActorMessageSenders.Values) { actorMessageSender.Dispose(); } this.ActorMessageSenders.Clear(); } public ActorMessageSender Get(long id) { if (id == 0) { throw new Exception($"actor id is 0"); } if (this.ActorMessageSenders.TryGetValue(id, out ActorMessageSender actorMessageSender)) { return actorMessageSender; } actorMessageSender = ComponentFactory.CreateWithId(id); actorMessageSender.Parent = this; this.ActorMessageSenders[id] = actorMessageSender; return actorMessageSender; } public ActorMessageSender GetWithActorId(long actorId) { if (actorId == 0) { throw new Exception($"actor id is 0"); } if (this.ActorMessageSenders.TryGetValue(actorId, out ActorMessageSender actorMessageSender)) { return actorMessageSender; } actorMessageSender = ComponentFactory.CreateWithId(actorId, actorId); actorMessageSender.Parent = this; this.ActorMessageSenders[actorId] = actorMessageSender; return actorMessageSender; } public void Remove(long id) { ActorMessageSender actorMessageSender; if (!this.ActorMessageSenders.TryGetValue(id, out actorMessageSender)) { return; } this.ActorMessageSenders.Remove(id); actorMessageSender.Dispose(); } } }