Added support to test against Twitch's mocked websocket & webserver. Fixed some connection problems.
This commit is contained in:
@ -94,18 +94,20 @@ namespace TwitchChatTTS.Twitch.Socket
|
||||
if (clientDisconnect)
|
||||
await client.DisconnectAsync(new SocketDisconnectionEventArgs("Closed", "No need for a tertiary client."));
|
||||
};
|
||||
client.OnDisconnected += (s, e) =>
|
||||
client.OnDisconnected += async (s, e) =>
|
||||
{
|
||||
bool reconnecting = false;
|
||||
lock (_lock)
|
||||
{
|
||||
if (_identified?.UID == client.UID)
|
||||
{
|
||||
_logger.Debug($"Identified Twitch client has disconnected [client: {client.UID}][main: {_identified.UID}][backup: {_backup?.UID}]");
|
||||
_logger.Warning($"Identified Twitch client has disconnected [client: {client.UID}][main: {_identified.UID}][backup: {_backup?.UID}]");
|
||||
_identified = null;
|
||||
reconnecting = true;
|
||||
}
|
||||
else if (_backup?.UID == client.UID)
|
||||
{
|
||||
_logger.Debug($"Backup Twitch client has disconnected [client: {client.UID}][main: {_identified?.UID}][backup: {_backup.UID}]");
|
||||
_logger.Warning($"Backup Twitch client has disconnected [client: {client.UID}][main: {_identified?.UID}][backup: {_backup.UID}]");
|
||||
_backup = null;
|
||||
}
|
||||
else if (client.ReceivedReconnecting)
|
||||
@ -115,6 +117,12 @@ namespace TwitchChatTTS.Twitch.Socket
|
||||
else
|
||||
_logger.Error($"Twitch client disconnected from unknown source [client: {client.UID}][main: {_identified?.UID}][backup: {_backup?.UID}]");
|
||||
}
|
||||
|
||||
if (reconnecting)
|
||||
{
|
||||
var client = GetWorkingClient();
|
||||
await client.Connect();
|
||||
}
|
||||
};
|
||||
|
||||
_logger.Debug("Created a Twitch websocket client.");
|
||||
|
@ -16,6 +16,7 @@ namespace TwitchChatTTS.Twitch.Socket
|
||||
private readonly IDictionary<string, Type> _messageTypes;
|
||||
private readonly IDictionary<string, string> _subscriptions;
|
||||
private readonly IBackoff _backoff;
|
||||
private readonly Configuration _configuration;
|
||||
private DateTime _lastReceivedMessageTimestamp;
|
||||
private bool _disconnected;
|
||||
private readonly object _lock;
|
||||
@ -33,6 +34,7 @@ namespace TwitchChatTTS.Twitch.Socket
|
||||
public TwitchWebsocketClient(
|
||||
[FromKeyedServices("twitch")] IEnumerable<ITwitchSocketHandler> handlers,
|
||||
[FromKeyedServices("twitch")] IBackoff backoff,
|
||||
Configuration configuration,
|
||||
ILogger logger
|
||||
) : base(logger, new JsonSerializerOptions()
|
||||
{
|
||||
@ -42,6 +44,7 @@ namespace TwitchChatTTS.Twitch.Socket
|
||||
{
|
||||
_handlers = handlers.ToDictionary(h => h.Name, h => h);
|
||||
_backoff = backoff;
|
||||
_configuration = configuration;
|
||||
_subscriptions = new Dictionary<string, string>();
|
||||
_lock = new object();
|
||||
|
||||
@ -52,7 +55,11 @@ namespace TwitchChatTTS.Twitch.Socket
|
||||
_messageTypes.Add("notification", typeof(NotificationMessage));
|
||||
|
||||
UID = Guid.NewGuid().ToString("D");
|
||||
URL = "wss://eventsub.wss.twitch.tv/ws";
|
||||
|
||||
if (_configuration.Environment == "PROD" || string.IsNullOrWhiteSpace(_configuration.Twitch?.WebsocketUrl))
|
||||
URL = "wss://eventsub.wss.twitch.tv/ws";
|
||||
else
|
||||
URL = _configuration.Twitch.WebsocketUrl;
|
||||
}
|
||||
|
||||
|
||||
@ -96,16 +103,10 @@ namespace TwitchChatTTS.Twitch.Socket
|
||||
_disconnected = true;
|
||||
}
|
||||
|
||||
_logger.Information($"Twitch websocket client disconnected [status: {e.Status}][reason: {e.Reason}]");
|
||||
_logger.Information($"Twitch websocket client disconnected [status: {e.Status}][reason: {e.Reason}][client: {UID}]");
|
||||
|
||||
Connected = false;
|
||||
Identified = false;
|
||||
|
||||
if (!ReceivedReconnecting)
|
||||
{
|
||||
_logger.Information("Attempting to reconnect to Twitch websocket server.");
|
||||
await Reconnect(_backoff, async () => await Connect());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user