// 从磁盘读取server.json反序列化为ServerJson对象 private static void ServerJsonInit() { if (!_serverJsonInited) { lock (_serverJsonlocker) { if (!_serverJsonInited) { string serverJson = SpecialPath.ReadServerJsonFile(); if (!string.IsNullOrEmpty(serverJson)) { try { ServerJsonDb data = VirtualRoot.JsonSerializer.Deserialize <ServerJsonDb>(serverJson); _serverJson = data; if (KernelBrandId != Guid.Empty) { var kernelToRemoves = data.Kernels.Where(a => a.BrandId != KernelBrandId).ToArray(); foreach (var item in kernelToRemoves) { data.Kernels.Remove(item); } var coinKernelToRemoves = data.CoinKernels.Where(a => kernelToRemoves.Any(b => b.Id == a.KernelId)).ToArray(); foreach (var item in coinKernelToRemoves) { data.CoinKernels.Remove(item); } var poolKernelToRemoves = data.PoolKernels.Where(a => kernelToRemoves.Any(b => b.Id == a.KernelId)).ToArray(); foreach (var item in poolKernelToRemoves) { data.PoolKernels.Remove(item); } } if (PoolBrandId != Guid.Empty) { var poolToRemoves = data.Pools.Where(a => a.BrandId != PoolBrandId && data.Pools.Any(b => b.CoinId == a.CoinId && b.BrandId == poolBrandId)).ToArray(); foreach (var item in poolToRemoves) { data.Pools.Remove(item); } var poolKernelToRemoves = data.PoolKernels.Where(a => poolToRemoves.Any(b => b.Id == a.PoolId)).ToArray(); foreach (var item in poolKernelToRemoves) { data.PoolKernels.Remove(item); } } } catch (Exception e) { Logger.ErrorDebugLine(e); } } else { _serverJson = new ServerJsonDb(); } _serverJsonInited = true; } } } }
public void Init(Action callback) { Task.Factory.StartNew(() => { OfficialServer.GetJsonFileVersionAsync(AssemblyInfo.ServerJsonFileName, (jsonFileVersion) => { if (!string.IsNullOrEmpty(jsonFileVersion)) { JsonFileVersion = jsonFileVersion; } }); GpuProfileSet.Instance.Register(this); bool isWork = Environment.GetCommandLineArgs().Contains("--work", StringComparer.OrdinalIgnoreCase); if (DevMode.IsDebugMode && !VirtualRoot.IsMinerStudio && !isWork) { DoInit(isWork, callback); return; } string serverJson = SpecialPath.ReadServerJsonFile(); string langJson = ClientId.ReadLocalLangJsonFile(); int initialCount = 2; if (isWork) { initialCount = 1; } CountdownEvent countdown = new CountdownEvent(initialCount); if (!isWork) { SpecialPath.GetAliyunServerJson((data) => { serverJson = Encoding.UTF8.GetString(data); SpecialPath.WriteServerJsonFile(serverJson); countdown.Signal(); }); } SpecialPath.GetAliyunLangJson((data) => { langJson = Encoding.UTF8.GetString(data); countdown.Signal(); }); Task.Factory.StartNew(() => { if (countdown.Wait(30 * 1000)) { Logger.InfoDebugLine("json下载完成"); Language.Impl.LangJson.Instance.Init(langJson); DoInit(isWork, callback); } else { Logger.InfoDebugLine("启动json下载超时"); Language.Impl.LangJson.Instance.Init(langJson); DoInit(isWork, callback); } }); }); }