Skip to content

Commit

Permalink
improvements to core interest management system.
Browse files Browse the repository at this point in the history
  • Loading branch information
dragonslaya84 committed Nov 8, 2021
1 parent 4d035b0 commit 7451f01
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 29 deletions.
52 changes: 32 additions & 20 deletions Assets/Mirage/Runtime/InterestManagement/InterestManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,27 @@ namespace Mirage.InterestManagement
{
public class InterestManager
{
private class SystemComparer : IEqualityComparer<ObserverData>
{
public bool Equals(ObserverData x, ObserverData y)
{
return nameof(x.System).GetStableHashCode() == nameof(y.System).GetStableHashCode();
}

public int GetHashCode(ObserverData obj)
{
int hash = nameof(obj.System).GetStableHashCode();

return hash;
}
}

static readonly ILogger Logger = LogFactory.GetLogger(typeof(InterestManager));

#region Fields

public readonly ServerObjectManager ServerObjectManager;
private readonly List<ObserverData> _visibilitySystems = new List<ObserverData>();
private readonly HashSet<ObserverData> _visibilitySystems = new HashSet<ObserverData>(new SystemComparer());
private List<INetworkPlayer> _observers = new List<INetworkPlayer>();

private static readonly ProfilerMarker ObserverProfilerMarker = new ProfilerMarker(nameof(Observers));
Expand Down Expand Up @@ -67,9 +82,9 @@ private void OnAuthenticated(INetworkPlayer player)
}
else
{
foreach (ObserverData systemData in _visibilitySystems)
foreach (ObserverData observer in _visibilitySystems)
{
systemData.System.OnAuthenticated(player);
observer.System.OnAuthenticated(player);
}
}

Expand All @@ -94,9 +109,9 @@ private void OnSpawnInWorld(NetworkIdentity identity)
}
else
{
foreach (ObserverData systemData in _visibilitySystems)
foreach (ObserverData observer in _visibilitySystems)
{
systemData.System.OnSpawned(identity);
observer.System.OnSpawned(identity);
}
}

Expand Down Expand Up @@ -125,9 +140,9 @@ internal void Update()

OnUpdateProfilerMarker.Begin();

foreach (ObserverData observerData in _visibilitySystems)
foreach (ObserverData observer in _visibilitySystems)
{
observerData.System.CheckForObservers();
observer.System.CheckForObservers();
}

OnUpdateProfilerMarker.End();
Expand Down Expand Up @@ -164,40 +179,37 @@ protected internal void Send<T>(NetworkIdentity identity, T msg, int channelId =
/// <summary>
/// Register a specific interest management system to the interest manager.
/// </summary>
/// <param name="system">The system we want to register in the interest manager.</param>
internal void RegisterVisibilitySystem(ref ObserverData system)
/// <param name="observer">The system we want to register in the interest manager.</param>
internal void RegisterVisibilitySystem(ref ObserverData observer)
{
if (_visibilitySystems.Contains(system))
if (_visibilitySystems.Contains(observer))
{
Logger.LogWarning(
"[InterestManager] - System already register to interest manager. Please check if this was correct.");

return;
}

if (Logger.logEnabled)
Logger.Log($"[Interest Manager] - Registering system {system} to our manager.");
Logger.Log($"[Interest Manager] - Registering system {observer} to our manager.");

_visibilitySystems.Add(system);
_visibilitySystems.Add(observer);
}

/// <summary>
/// Un-register a specific interest management system from the interest manager.
/// </summary>
/// <param name="system">The system we want to un-register from the interest manager.</param>
internal void UnRegisterVisibilitySystem(ref ObserverData system)
/// <param name="observer">The system we want to un-register from the interest manager.</param>
internal void UnRegisterVisibilitySystem(ref ObserverData observer)
{
if (!_visibilitySystems.Contains(system))
if (!_visibilitySystems.Contains(observer))
{
if (Logger.logEnabled)
Logger.Log($"[Interest Manager] - Un-Registering system {system} from our manager.");
Logger.Log($"[Interest Manager] - Un-Registering system {observer} from our manager.");
return;
}

Logger.LogWarning(
"[InterestManager] - Cannot find system in interest manager. Please check make sure it was registered.");

_visibilitySystems.Remove(system);
_visibilitySystems.Remove(observer);
}


Expand Down
14 changes: 5 additions & 9 deletions Assets/Mirage/Runtime/InterestManagement/ObserverData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,16 @@

namespace Mirage.InterestManagement
{
public struct ObserverData
public readonly struct ObserverData
{
private readonly INetworkVisibility _system;
public INetworkVisibility System { get; }

private readonly Dictionary<NetworkIdentity, HashSet<INetworkPlayer>> _observers;

public INetworkVisibility System => _system;

public Dictionary<NetworkIdentity, HashSet<INetworkPlayer>> Observers => _observers;
public Dictionary<NetworkIdentity, HashSet<INetworkPlayer>> Observers { get; }

public ObserverData(INetworkVisibility system, Dictionary<NetworkIdentity, HashSet<INetworkPlayer>> observers)
{
_system = system;
_observers = observers;
System = system;
Observers = observers;
}
public override string ToString()
{
Expand Down

0 comments on commit 7451f01

Please sign in to comment.