job cfg 新增gen_type类型 data_json_monolithic:将所有json文件生成到一个文件

main
walon 2021-04-08 10:56:58 +08:00
parent ff467b8fa7
commit ad965cf8e4
1 changed files with 36 additions and 1 deletions

View File

@ -49,7 +49,7 @@ namespace Luban.Job.Cfg
[Option("output_data_dir", Required = true, HelpText = "output data directory")] [Option("output_data_dir", Required = true, HelpText = "output data directory")]
public string OutputDataDir { get; set; } public string OutputDataDir { get; set; }
[Option("gen_types", Required = true, HelpText = "code_cs_bin,code_cs_json,code_lua_bin,data_bin,data_lua,data_json can be multi")] [Option("gen_types", Required = true, HelpText = "code_cs_bin,code_cs_json,code_lua_bin,data_bin,data_lua,data_json,data_json_monolithic . can be multi")]
public string GenType { get; set; } public string GenType { get; set; }
[Option('s', "service", Required = true, HelpText = "service")] [Option('s', "service", Required = true, HelpText = "service")]
@ -824,6 +824,41 @@ class Vector4:
} }
break; break;
} }
case "data_json_monolithic":
{
await CheckLoadCfgDataAsync();
List<Task<byte[]>> allJsonTask = new List<Task<byte[]>>();
foreach (var c in exportTables)
{
allJsonTask.Add(Task.Run(() =>
{
return ToOutputData(c, ass.GetTableDataList(c), "data_json");
}));
}
await Task.WhenAll(allJsonTask);
int estimatedCapacity = allJsonTask.Sum(t => t.Result.Length + 100);
var sb = new MemoryStream(estimatedCapacity);
sb.Write(System.Text.Encoding.UTF8.GetBytes("{\n"));
for (int i = 0; i < exportTables.Count; i++)
{
if (i != 0)
{
sb.Write(System.Text.Encoding.UTF8.GetBytes((",\n")));
}
sb.Write(System.Text.Encoding.UTF8.GetBytes("\"" + exportTables[i].Name + "\":"));
sb.Write(allJsonTask[i].Result);
}
sb.Write(System.Text.Encoding.UTF8.GetBytes("\n}"));
var content = sb.ToArray();
s_logger.Debug("estimated size:{0} actual size:{1}", estimatedCapacity, content.Length);
var md5 = FileUtil.CalcMD5(content);
var outputFile = "tables.json";
CacheManager.Ins.AddCache(outputFile, md5, content);
genDataFiles.Add(new FileInfo() { FilePath = outputFile, MD5 = md5 });
break;
}
case "data_lua": case "data_lua":
{ {
await CheckLoadCfgDataAsync(); await CheckLoadCfgDataAsync();