feat: added revised version of the old networking system

This commit is contained in:
2025-05-10 22:38:01 +03:00
parent cd3e23b427
commit 23a0c8e893
13 changed files with 291 additions and 3 deletions

View 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();
}