public async Task LoadService(ServiceInfo model) { try { if (ServiceInfo?.Id == model.Id) { return; } var service = AvaliableServices.FirstOrDefault(s => s.Id == model.Id); if (service != null) { ServiceInfo = service; } else { var path = Path.Combine(serviceDir, $"{model.Name}-v{model.Version}{Path.GetExtension(model.ArchiveUrl)}"); using (HttpClient client = new HttpClient()) { await DownloadFile(client, model.ArchiveUrl, path); } var targetDir = Path.Combine(serviceDir, Path.GetFileNameWithoutExtension(path)); Unzip(path, targetDir); File.Delete(path); model.Guid = Guid.NewGuid(); model.LoadedAt = DateTime.Now; model.Location = targetDir; ServiceInfoHelper.Save(Path.Combine(targetDir, "serviceInfo.json"), model); ServiceInfo = model; } Restart(); } catch (Exception ex) { throw new Exception("Load service failed.", ex); } }
public void Boot(IConsulClient consulClient, ILoggerFactory logerFactory) { foreach (var dir in Directory.GetDirectories(serviceDir)) { var serviceFilePath = Path.Combine(dir, "serviceInfo.json"); if (!File.Exists(serviceFilePath)) { continue; } AvaliableServices.Add(ServiceInfoHelper.Load(serviceFilePath)); } if (File.Exists(serviceInfoFilePath)) { serviceInfo = ServiceInfoHelper.Load(serviceInfoFilePath); } else if (AvaliableServices.Count > 0) { ServiceInfo = AvaliableServices.OrderByDescending(s => s.LoadedAt).First(); } Start(consulClient, logerFactory); }