public IEnumerator AcquireToken(string APIKey, AcquireTokenEventHandler handler)
        {
            if (_mutex)
            {
                yield return(new WaitUntil(() => { return !_mutex; }));
            }
            _mutex = true;

            if (_tokenCache.ContainsKey(APIKey))
            {
                var cachedToken = _tokenCache[APIKey];
                var args        = new AcquireTokenEventArgs(cachedToken);
                handler.Invoke(this, args);
            }
            else
            {
                // Create headers
                var headers = new Dictionary <string, string>();

                //headers.Add(Strings.HEADER_CONTENT_TYPE, Strings.CONTENT_TYPE_APPLICATION_OCTET_STREAM);
                headers.Add(CognitiveStrings.HEADER_OCP_APIM_SUBSCRIPTION_KEY, APIKey);

                // Request dummy data
                var dummyData = new byte[1] {
                    1
                };

                // If the endpoint gets 0 bytes it returns an error,
                // so we send 1 byte of dummy data
                var w = new WWW(TokenManagerStrings.URI_COGNITIVE_TOKEN, dummyData, headers);
                yield return(w);

                // Response
                if (string.IsNullOrEmpty(w.error))
                {
                    var token = w.text;

                    _tokenCache.Add(APIKey, token);

                    var args = new AcquireTokenEventArgs(token);
                    if (handler != null)
                    {
                        handler.Invoke(this, args);
                    }
                }
                else
                {
                    Debug.LogError("Error obtaining auth token: " + w.error);
                }
                _mutex = false;
            }
        }
        public IEnumerator WaitForMutex(string APIKey, AcquireTokenEventHandler handler)
        {
            yield return(new WaitUntil(() => { return !_mutex; }));

            var args = new AcquireTokenEventArgs(_tokenCache[APIKey]);
        }
 public void AcquireTokenAsync(string APIKey, AcquireTokenEventHandler handler)
 {
     StartCoroutine(AcquireToken(APIKey, handler));
 }