feat: added revised version of the old networking system
This commit is contained in:
36
Shared/Network/NetworkManager.cs
Normal file
36
Shared/Network/NetworkManager.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
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();
|
||||
}
|
||||
Reference in New Issue
Block a user