diff --git a/src/Nullinside.Api.Common/Twitch/TwitchClientProxy.cs b/src/Nullinside.Api.Common/Twitch/TwitchClientProxy.cs index 0f8c0d8..9e8c408 100644 --- a/src/Nullinside.Api.Common/Twitch/TwitchClientProxy.cs +++ b/src/Nullinside.Api.Common/Twitch/TwitchClientProxy.cs @@ -67,6 +67,11 @@ public class TwitchClientProxy : ITwitchClientProxy { /// The callback(s) to invoke when a channel receives a ban message. /// private Action? onUserBanReceived; + + /// + /// The callback(s) to invoke when a new instance is created. + /// + private static Action? onInstanceCreated; /// /// The web socket to connect to twitch chat with. @@ -93,6 +98,7 @@ public static TwitchClientProxy Instance { get { if (null == instance) { instance = new TwitchClientProxy(); + onInstanceCreated?.Invoke(instance); } return instance; @@ -164,6 +170,17 @@ public async Task AddMessageCallback(string channel, Action callback) { onMessageReceived -= callback; } + + /// + public void AddInstanceCallback(Action callback) { + onInstanceCreated -= callback; + onInstanceCreated += callback; + } + + /// + public void RemoveInstanceCallback(Action callback) { + onInstanceCreated -= callback; + } /// public async Task AddBannedCallback(string channel, Action callback) { @@ -408,8 +425,11 @@ private void TwitchChatClient_OnUserBanned(object? sender, OnUserBannedArgs e) { /// True if called directly, false if called from the destructor. protected virtual void Dispose(bool disposing) { if (disposing) { + client?.Disconnect(); twitchChatClientReconnect?.Dispose(); socket?.Dispose(); } + + instance = null; } } \ No newline at end of file