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(); }