From eb5f2be103a6bdc603cf24549890eff67798a729 Mon Sep 17 00:00:00 2001 From: alexiscatnip Date: Tue, 19 Jul 2022 01:06:56 +0800 Subject: [PATCH] refactor: add IDisposable to AgentTracker --- Assets/Raindrop/Core/AgentsTracker.cs | 13 ++++++++++++- Assets/Raindrop/RaindropInstance.cs | 6 ++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Assets/Raindrop/Core/AgentsTracker.cs b/Assets/Raindrop/Core/AgentsTracker.cs index b1d7d2e..38a9fa2 100644 --- a/Assets/Raindrop/Core/AgentsTracker.cs +++ b/Assets/Raindrop/Core/AgentsTracker.cs @@ -9,7 +9,7 @@ namespace Raindrop // in particular, it tracks : // region handle // - public class AgentsTracker + public class AgentsTracker : IDisposable { //hashtable of agents, and the sim they are last known to reside in. public readonly Dictionary agentInfos = new Dictionary(); @@ -45,6 +45,10 @@ namespace Raindrop RegisterClientEvents(instance.Client); } + public void Dispose() + { + UnregisterClientEvents(instance.Client); + } private void RegisterClientEvents(GridClient client) { @@ -52,6 +56,13 @@ namespace Raindrop // client.Self.TeleportProgress += new EventHandler(Self_TeleportProgress); client.Network.SimDisconnected += new EventHandler(Network_SimDisconnected); } + + private void UnregisterClientEvents(GridClient client) + { + client.Grid.CoarseLocationUpdate -= new EventHandler(Grid_CoarseLocationUpdate); + // client.Self.TeleportProgress -= new EventHandler(Self_TeleportProgress); + client.Network.SimDisconnected -= new EventHandler(Network_SimDisconnected); + } #region eventHandlers void Grid_CoarseLocationUpdate(object sender, CoarseLocationUpdateEventArgs e) diff --git a/Assets/Raindrop/RaindropInstance.cs b/Assets/Raindrop/RaindropInstance.cs index d05202a..ff21a72 100644 --- a/Assets/Raindrop/RaindropInstance.cs +++ b/Assets/Raindrop/RaindropInstance.cs @@ -452,6 +452,12 @@ namespace Raindrop { MarkEndExecution(); + if (_agentsTracker != null) + { + _agentsTracker.Dispose(); + _agentsTracker = null; + } + if (Cof != null) { Cof.Dispose();