コード例 #1
0
        public void Authenticate(string serverAccountId)
        {
            Mogger.Log(LogMessages.DiscordAuthInProgress);
            this.handlerCompleted = false;
            var        stateString = OAuth2Utils.GenerateStateString(20);
            HttpServer authServer  = null;

            for (var i = 0; i < reservedPorts.Length && authServer == null; i++)
            {
                try
                {
                    authServer = new HttpServer(reservedPorts[i], Mogger.Log);
                }
                catch (PortUnavailableException e)
                {
                    Mogger.LogError(e.Message);
                    if (i == reservedPorts.Length - 1)
                    {
                        throw;
                    }
                }
            }
            // ReSharper disable once PossibleNullReferenceException
            authServer.AddHtmlDocumentHandler((processor, stream) => OAuth2RedirectHandler(processor, authServer.Port, stateString));
            OpenUrl(GetOAuth2Url(serverAccountId, authServer.Port, stateString));
            while (!this.handlerCompleted)
            {
                Task.Delay(50).Wait();
            }
            authServer.Dispose();
        }