using ZeroLevel.Network; namespace ZeroLevel.Services.Applications { public abstract class BaseWindowsExService : BaseWindowsService, IExchangeService { public string Key { get; private set; } public string Version { get; private set; } public string Protocol { get; private set; } public string Group { get; private set; } public string Type { get; private set; } protected readonly Exchange _exchange; protected readonly IConfiguration _config; protected BaseWindowsExService(IConfiguration configuration = null) : base() { _config = configuration ?? Configuration.Default; base.Name = ReadName(_config); this.Key = ReadKey(_config); this.Version = ReadVersion(_config); this.Protocol = ReadProtocol(_config); this.Group = ReadServiceGroup(_config); this.Type = ReadServiceType(_config); var discovery = _config.First("discovery"); var discoveryProtocol = _config.FirstOrDefault("discoveryProtocol", "socket"); _exchange = new Exchange(new DiscoveryClient(discoveryProtocol, discovery)); } #region Config private string ReadName(IConfiguration configuration) { if (_config.Contains("ServiceName")) return _config.First("ServiceName"); if (_config.Contains("AppName")) return _config.First("AppName"); return this.GetType().Name; } private string ReadKey(IConfiguration configuration) { if (_config.Contains("ServiceKey")) return _config.First("ServiceKey"); if (_config.Contains("AppKey")) return _config.First("AppKey"); return null; } private string ReadVersion(IConfiguration configuration) { if (_config.Contains("Version")) return _config.First("Version"); if (_config.Contains("AppVersion")) return _config.First("AppVersion"); return "1.0"; } private string ReadProtocol(IConfiguration configuration) { if (_config.Contains("Protocol")) return _config.First("Protocol"); if (_config.Contains("Transport")) return _config.First("Transport"); return null; } private string ReadServiceGroup(IConfiguration configuration) { if (_config.Contains("DiscoveryGroup")) return _config.First("DiscoveryGroup"); if (_config.Contains("ServiceGroup")) return _config.First("ServiceGroup"); return ExServiceInfo.DEFAULT_GROUP_NAME; } private string ReadServiceType(IConfiguration configuration) { if (_config.Contains("DiscoveryType")) return _config.First("DiscoveryType"); if (_config.Contains("ServiceType")) return _config.First("ServiceType"); return ExServiceInfo.DEFAULT_TYPE_NAME; } #endregion Config public string Endpoint { get; private set; } public override void DisposeResources() { this._exchange.Dispose(); } } }