void StartQosMatchmaking(string mmServiceURL, string multiplayFleetID, CancellationToken token = default)
        {
            if (string.IsNullOrEmpty(multiplayFleetID))
            {
                Debug.LogError("Qos Discovery Failed - Fleet ID was missing or invalid");
                return;
            }

            // Start with Qos Discovery
            OnStateChanged(MatchmakingState.QosDiscovery);
            m_QosDiscovery = new QosDiscoveryAsyncWrapper();

            m_QosDiscovery.Start(multiplayFleetID, 0, servers =>
            {
                if (token.IsCancellationRequested)
                {
                    Debug.Log("Qos Discovery Cancelled");
                    OnStateChanged(MatchmakingState.Idle);
                    return;
                }

                m_QosServers = servers;

                if (m_QosServers == null || m_QosServers.Length == 0)
                {
                    Debug.LogError($"Qos Discovery Failed - No servers found for {multiplayFleetID}");
                    OnStateChanged(MatchmakingState.Idle);
                    return;
                }

                // Move on to Qos Ping
                StartQosPing(mmServiceURL, multiplayFleetID, token);
            });
        }
        IEnumerator DoQosAsync()
        {
            // Qos Discovery - Find servers to ping
            var qosDiscovery = new QosDiscoveryAsyncWrapper();

            yield return(qosDiscovery.StartEnumerator(m_FleetId));

            var servers = qosDiscovery.Servers;

            if (servers == null || servers.Length == 0)
            {
                Debug.LogWarning("Qos was requested, but no qos servers could be found.");
                yield break;
            }

            // Qos Pings - Ping servers for info
            var qosPinger = new QosPingAsyncWrapper(servers);

            yield return(qosPinger.StartEnumerator());

            m_QosResults = qosPinger.QosResults;

            if (m_QosResults == null || m_QosResults.Count == 0)
            {
                Debug.LogWarning("Qos was requested, but no valid qos results were returned.");
            }
            else
            {
                QosConnector.Instance.RegisterProvider(() => m_QosResults);
            }
        }