32 lines
2.3 KiB
C#
32 lines
2.3 KiB
C#
using game.Account;
|
|
using game.PlayerDataStorage;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
using System.Text.Json;
|
|
|
|
if(args.Length==1 && args[0]=="--verify-import-101") { await Import101Tests.Run(); return; }
|
|
if(args.Length==1 && args[0]=="--import-approved-101") { await Import101.Run(); return; }
|
|
if(args.Length==1 && args[0]=="--verify-advert") { AdvertCompatibilityTests.Run(); return; }
|
|
if(args.Length==1 && args[0]=="--import-approved-102") { await Import102.Run(); return; }
|
|
if(args.Length==1 && args[0]=="--backup-pf-101-102") { await PFSourceBackup.Run(); return; }
|
|
if(args.Length!=1 || args[0]!="--backup-101-102") throw new ArgumentException("Explicit backup command required.");
|
|
const string api="http://s101.local:18080/";
|
|
var folder=Path.GetFullPath("CodexOutput/upserver/KVGameplayLoopTests/backups/"+DateTime.UtcNow.ToString("yyyyMMddTHHmmssZ"));
|
|
Directory.CreateDirectory(folder);
|
|
foreach(var id in new[]{"101","102"})
|
|
{
|
|
using var session=new S101AccountSession(new Uri(api));
|
|
var login=await session.LoginAsync(id);
|
|
if(!login.Success || session.NewlyCreated || session.PlayerId!=id) throw new InvalidOperationException("Existing account login failed: "+id+" "+login.Error);
|
|
using var http=new HttpClient(new HttpClientHandler{CookieContainer=session.Cookies,UseCookies=true,AllowAutoRedirect=false}){Timeout=TimeSpan.FromSeconds(20)};
|
|
var kv=new PlayerKVClient(http,session.ApiBaseUri);
|
|
var read=await kv.GetAsync(null);
|
|
if(!read.Success) throw new InvalidOperationException("Read failed: "+id+" "+read.Error);
|
|
var bytes=Encoding.UTF8.GetBytes(JsonSerializer.Serialize(new{playerId=id,api,at=DateTime.UtcNow,data=read.Data},new JsonSerializerOptions{WriteIndented=true}));
|
|
var path=Path.Combine(folder,id+".json");
|
|
using(var stream=new FileStream(path,FileMode.CreateNew,FileAccess.Write,FileShare.Read)) { stream.Write(bytes); stream.Flush(true); }
|
|
var summary=new{playerId=id,path,sha256=Convert.ToHexString(SHA256.HashData(bytes)),count=read.Data.Count,keys=read.Data.Keys.OrderBy(k=>k).ToArray(),hasMainSave=read.Data.ContainsKey("NewPlayerDataDic"),kvWrites=0};
|
|
File.WriteAllText(Path.Combine(folder,id+"-summary.json"),JsonSerializer.Serialize(summary,new JsonSerializerOptions{WriteIndented=true}));
|
|
Console.WriteLine(JsonSerializer.Serialize(summary));
|
|
}
|