Engine-Pong/Shared/Network/NetworkManager.cs

37 lines
1.4 KiB
C#

using System.Collections.Generic;
using Syntriax.Engine.Core;
namespace Syntriax.Engine.Network;
public class NetworkManager : UniverseObject, INetworkManager
{
public INetworkCommunicator NetworkCommunicator { get; set; } = null!;
private readonly Dictionary<string, INetworkEntity> _networkEntities = [];
public IReadOnlyDictionary<string, INetworkEntity> NetworkEntities => _networkEntities;
private readonly BehaviourCollector<INetworkEntity> _networkEntityCollector = new();
public IBehaviourCollector<INetworkEntity> NetworkEntityCollector => _networkEntityCollector;
public NetworkManager()
{
_networkEntityCollector.OnCollected += OnCollected;
_networkEntityCollector.OnRemoved += OnRemoved;
}
private void OnCollected(IBehaviourCollector<INetworkEntity> sender, INetworkEntity behaviourCollected)
{
if (!_networkEntities.TryAdd(behaviourCollected.Id, behaviourCollected))
throw new($"Unable to add {behaviourCollected.Id} to {nameof(NetworkManager)}");
}
private void OnRemoved(IBehaviourCollector<INetworkEntity> sender, INetworkEntity behaviourRemoved)
{
_networkEntities.Remove(behaviourRemoved.Id);
}
protected override void OnEnteringUniverse(IUniverse universe) => _networkEntityCollector.Assign(universe);
protected override void OnExitingUniverse(IUniverse universe) => _networkEntityCollector.Unassign();
}