示例#1
0
        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 ))}");
            }
        }
示例#2
0
        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();
            }
        }