fix: network manager not unmonitoring removed universe objects
This commit is contained in:
parent
f3ff1b74d2
commit
b3dd0f72a4
@ -208,7 +208,37 @@ public class NetworkManager : UniverseObject, INetworkManager
|
|||||||
|
|
||||||
private void OnRemoved(IBehaviourCollector<INetworkEntity> sender, IBehaviourCollector<INetworkEntity>.BehaviourRemovedArguments args)
|
private void OnRemoved(IBehaviourCollector<INetworkEntity> sender, IBehaviourCollector<INetworkEntity>.BehaviourRemovedArguments args)
|
||||||
{
|
{
|
||||||
_networkEntities.Remove(args.BehaviourRemoved.Id);
|
INetworkEntity removedBehaviour = args.BehaviourRemoved;
|
||||||
|
if (!_networkEntities.Remove(args.BehaviourRemoved.Id))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (clientListenerDelegates.TryGetValue(removedBehaviour.GetType(), out Dictionary<Type, List<DelegateData>>? clientInterfaceDelegates))
|
||||||
|
foreach ((Type clientListenerInterfaceType, List<DelegateData> clientDelegateDataList) in clientInterfaceDelegates)
|
||||||
|
foreach ((Type parameterType, MethodInfo receiveMethod) in clientDelegateDataList)
|
||||||
|
{
|
||||||
|
if (!clientPacketListeners.TryGetValue(parameterType, out Dictionary<string, Event<string, object>>? clientListeners))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!clientListeners.TryGetValue(removedBehaviour.Id, out Event<string, object>? clientListenerEvent))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
clientListeners.Remove(removedBehaviour.Id);
|
||||||
|
clientListenerEvent.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (serverListenerDelegates.TryGetValue(removedBehaviour.GetType(), out Dictionary<Type, List<DelegateData>>? serverInterfaceDelegates))
|
||||||
|
foreach ((Type serverListenerInterfaceType, List<DelegateData> serverDelegateDataList) in serverInterfaceDelegates)
|
||||||
|
foreach ((Type parameterType, MethodInfo receiveMethod) in serverDelegateDataList)
|
||||||
|
{
|
||||||
|
if (!serverPacketListeners.TryGetValue(parameterType, out Dictionary<string, Event<string, object>>? serverListeners))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!serverListeners.TryGetValue(removedBehaviour.Id, out Event<string, object>? serverListenerEvent))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
serverListeners.Remove(removedBehaviour.Id);
|
||||||
|
serverListenerEvent.Clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnExitingUniverse(IUniverse universe) => _networkEntityCollector.Unassign();
|
protected override void OnExitingUniverse(IUniverse universe) => _networkEntityCollector.Unassign();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user