private static async Task <HydraClient> Login(string gameCode) { var hydraConfig = new HydraConfig(); var rateLimiter = new RateLimiter(); var client = new HydraClient(hydraConfig, rateLimiter); hydraConfig.UpdateServiceEndpoint( HydraServices.SharedService, new Endpoint { Name = HydraServices.SharedService, IP = "obt-shared-eds.qcapi.net", // TODO: load URL somewhere Port = 11701, Protocol = 1 }); Console.WriteLine("Getting environments"); var environments = await client.GetEnvironmentList(new GetEnvironmentListRequest { versions = hydraConfig.GetServiceVersions() }); hydraConfig.UpdateServiceEndpoint(HydraServices.AuthService2, environments?.data?.Environments.First()?.Endpoint); Console.WriteLine("Entering queue"); const string structureVersion = "12.31"; var loginResponse = await client.Login(new LoginRequest { login = gameCode, password = "", provider = "bnet", signature = new LoginSignature { Id = Guid.NewGuid().ToString("D") }, structureVersion = structureVersion, clientData = new LoginClientData { BuildConfiguration = "RetailClient", BuildVersion = "0.1.2589268", ProductBranch = "", Location = "", RequestedProfession = 0, LauncherType = "BETHESDA_NET" } }); int position = -1; while (loginResponse.data.Token.State != 2) { if (loginResponse.data.Position != position) { position = loginResponse.data.Position; Console.WriteLine($"Queued at position {position}"); } loginResponse = await client.CheckLogin(new CheckLoginRequest { token = loginResponse.data.Token.Token }); } var tokens = await client.GetTokens(new GetTokensRequest { token = loginResponse.data.Token.Token, versions = hydraConfig.GetServiceVersions() }); client.UpdateAuthorizationToken(tokens.data.AuthorizationToken); client.UpdateAccessRoleToken(tokens.data.AccessRoleToken); foreach (var endpoint in tokens.data.Endpoints) { hydraConfig.UpdateServiceEndpoint(endpoint); } string authorizationToken = tokens.data.AuthorizationToken; string diagnosticToken = tokens.data.DiagnosticToken; var refreshTokensResponse = await client.RefreshTokens(new RefreshTokensRequest { tokens = new[] { authorizationToken, diagnosticToken } }); authorizationToken = refreshTokensResponse.data.Tokens .Where(t => t.OldValue == authorizationToken) .Select(t => t.NewValue) .FirstOrDefault(); //diagnosticToken = refreshTokensResponse.data.Tokens // .Where(t => t.OldValue == diagnosticToken) // .Select(t => t.NewValue) // .FirstOrDefault(); client.UpdateAuthorizationToken(authorizationToken); Console.WriteLine("Logged in"); return(client); }
public HydraClient(HydraConfig config, RateLimiter rateLimiter) { _rateLimiter = rateLimiter; _httpClient = CreateHttpClient(); _config = config; }