// 从磁盘读取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;
             }
         }
     }
 }
Example #2
0
 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);
             }
         });
     });
 }