private async Task <T> requestWaypointData <T>(string path, Dictionary <string, string> query, string bucketKey) where T : External.WaypointResponse { var auth = await getTokenHeaders(); var opts = new Options(auth); // TODO(0xdeafcafe): Handle waypoint errors var response = await _statsClient.Do <T>("GET", path, query, opts); switch (response.StatusCode) { // Should never happen on player-related requests case ResponseCode.NotFound: throw new BaeException( "content_not_found", new Dictionary <string, object> { { "Path", path }, { "Query", query }, } ); case ResponseCode.PlayerHasNotPlayedHalo4: throw new BaeException("player_never_played"); case ResponseCode.Okay: case ResponseCode.Found: default: return(response); } }
public async Task ConnectOrLaunch() { if (_puppeteerRemoteHost != null) { var parts = _puppeteerRemoteHost.Split(":"); var lookups = await Dns.GetHostAddressesAsync(parts[0]); var ip = lookups.First().ToString(); var puppeteerUrl = $"http://{ip}:{parts[1]}"; var jsonClient = new JsonClient(puppeteerUrl); _logger.LogInformation($"Fetching websocket url from {puppeteerUrl}"); var version = await jsonClient.Do <Dictionary <string, string> >("GET", "/json/version"); var url = version["webSocketDebuggerUrl"]; _logger.LogInformation($"Connecting to browser with websocker url {url}"); _browser = await Puppeteer.ConnectAsync(new ConnectOptions { BrowserWSEndpoint = url }); _logger.LogInformation("Connected to browser"); return; } _logger.LogInformation("Downloading browser"); await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision); _logger.LogInformation("Launching headless browser"); _browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true }); _logger.LogInformation("Launched headless browser"); }