private static string GetConnectionStatusDescription(CQConnectionStatus status) { switch (status) { case CQConnectionStatus.AuthKeyError: return("Cannot authenticate with query server.\n** Ensure the API Key is correct **"); case CQConnectionStatus.Connected: return("Connected..."); case CQConnectionStatus.Disconnected: return("Disconnected..."); case CQConnectionStatus.ConnectionReset: return("Connection was interrupted..."); case CQConnectionStatus.WaitingForServer: return("Connection refused. Is TS3 and ClientQuery Addon enabled?"); case CQConnectionStatus.CannotRecover: return ("Connection was established but protocol cannot be determined.\nmTT Cannot Recover from this error!"); case CQConnectionStatus.Paused: return("Connection to TS3 Client is being stopped"); default: return($"Unknown status {(Enum.GetName( typeof( CQConnectionStatus ), status ))}"); } }
public static async void StartQueryClientAsync() { // Allow only one call to pass await TS3ClientQuery.Semaphore.WaitAsync(); Debug.WriteLine($"Current Semaphore Value is {TS3ClientQuery.Semaphore.CurrentCount}."); if (TS3ClientQuery.Semaphore.CurrentCount == 0) { TS3ClientQuery.Semaphore.Release(); return; } ConnectionStatus = CQConnectionStatus.WaitingForServer; try { while (true) { try { if (!HasConnectionError && ConnectionStatus != CQConnectionStatus.Paused) { var client = new TS3ClientQuery("127.0.0.1", 25639, _ApiKey); CQConnectionStatus status = await client.ConnectAsync(); var message = GetConnectionStatusDescription(status); SimpleLogger.Log(nameof(TS3ClientQuery), message); if (ConnectionStatus != CQConnectionStatus.Paused) { ConnectionStatus = status; } if (ConnectionStatus == CQConnectionStatus.ConnectionReset || ConnectionStatus == CQConnectionStatus.Disconnected || ConnectionStatus == CQConnectionStatus.WaitingForServer) { message += $"\nRetrying connection in {RetryTimerInSeconds} seconds..."; } SendStatueMessage(message); } if (ConnectionStatus == CQConnectionStatus.Paused) { break; } await Task.Delay(RetryTimerInSeconds * 1000); } catch (Exception) { } } } finally { SendStatueMessage("Auto connection to TS Client is now paused"); TS3ClientQuery.Semaphore.Release(); } }