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)
|
||||
{
|
||||
_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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user