using asap.core; using System; using System.Threading.Tasks; using game.Account; var liveApi = GContext.container.Resolve(); var liveUser = GContext.container.Resolve(); if (liveApi.ApiBaseUri.AbsoluteUri != "http://s101.local:18080/" || liveUser.ApiPlayerId != "101") return "Refused: baseline changed"; var endpoint = new Uri("http://127.0.0.1:62848/"); using var session = new S101AccountSession(endpoint); var output = new System.Text.StringBuilder(); foreach (var mode in new [] { "reset" }) { var start = DateTime.UtcNow; var failed = await session.LoginAsync("102"); var elapsed = (DateTime.UtcNow - start).TotalSeconds; var expected = mode == "401" ? AccountLoginError.Http : mode == "reset" ? AccountLoginError.Network : AccountLoginError.Timeout; if (failed.Error != expected || session.IsAuthenticated || session.InternalId != 0 || session.PlayerId != null) throw new Exception("Failure isolation mismatch: " + mode + "/" + failed.Error); if (mode == "401" && failed.StatusCode != 401) throw new Exception("Missing real 401"); if (mode == "timeout" && elapsed < 14) throw new Exception("Timeout was not real production duration"); var retried = await session.LoginAsync("102"); if (!retried.Success || !session.IsAuthenticated || session.PlayerId != "102") throw new Exception("Recovery failed: " + retried.Error); var read = await session.CheckAuthorizationAsync(); if (!read.Success) throw new Exception("Server rejected recovered Cookie: " + read.Error); output.AppendLine(mode + ": " + failed.Error + "; seconds=" + elapsed.ToString("F1") + "; Retry=OK; AuthorizedRead=OK"); } return output.ToString() + "Live101Unchanged=" + (liveUser.IsAuthorized && liveUser.ApiPlayerId == "101" && liveApi.ApiBaseUri.AbsoluteUri == "http://s101.local:18080/");