From c12a54f3b2e01157c291ed2ab7320ac59388fe73 Mon Sep 17 00:00:00 2001 From: Ogoun Date: Mon, 8 Apr 2019 16:23:36 +0300 Subject: [PATCH] Refactoring --- ZeroLevel.Discovery/App.config | 4 ++ ZeroLevel.Discovery/DiscoveryService.cs | 2 +- .../ZeroLevel.Discovery.csproj | 4 +- ...l.Discovery.csproj.CoreCompileInputs.cache | 2 +- ...el.Discovery.csprojAssemblyReference.cache | Bin 168267 -> 179314 bytes ZeroLevel.Discovery/packages.config | 2 +- .../Application/BaseWindowsExService.cs | 19 +++++ .../Application/BaseWindowsService.cs | 6 +- .../Services/Network/Contract/IExService.cs | 7 ++ ZeroLevel/Services/Network/NetUtils.cs | 23 +++--- .../Network/Services/DiscoveryClient.cs | 67 +++++++++--------- .../ZeroLevel.csproj.CoreCompileInputs.cache | 2 +- 12 files changed, 89 insertions(+), 49 deletions(-) diff --git a/ZeroLevel.Discovery/App.config b/ZeroLevel.Discovery/App.config index 8ac5084..eec1b5b 100644 --- a/ZeroLevel.Discovery/App.config +++ b/ZeroLevel.Discovery/App.config @@ -14,6 +14,10 @@ + + + + \ No newline at end of file diff --git a/ZeroLevel.Discovery/DiscoveryService.cs b/ZeroLevel.Discovery/DiscoveryService.cs index b36e4c9..4a0a592 100644 --- a/ZeroLevel.Discovery/DiscoveryService.cs +++ b/ZeroLevel.Discovery/DiscoveryService.cs @@ -40,7 +40,7 @@ namespace ZeroLevel.Discovery _exInbox.RegisterInbox>("services", (_, __) => routeTable.Get()); _exInbox.RegisterInbox("register", (info, _, __) => routeTable.Append(info)); - Log.Info($"TCP server started on port {socketPort}"); + Log.Info($"TCP server started {_exInbox.Endpoint.Address}:{socketPort}"); } public override void StopAction() diff --git a/ZeroLevel.Discovery/ZeroLevel.Discovery.csproj b/ZeroLevel.Discovery/ZeroLevel.Discovery.csproj index 3028b5e..8d11bee 100644 --- a/ZeroLevel.Discovery/ZeroLevel.Discovery.csproj +++ b/ZeroLevel.Discovery/ZeroLevel.Discovery.csproj @@ -42,8 +42,8 @@ ..\packages\Microsoft.Owin.Hosting.4.0.1\lib\net45\Microsoft.Owin.Hosting.dll - - ..\packages\Newtonsoft.Json.6.0.4\lib\net45\Newtonsoft.Json.dll + + C:\Users\a.bozhenov\source\repos\ZeroTests\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll ..\packages\Owin.1.0\lib\net40\Owin.dll diff --git a/ZeroLevel.Discovery/obj/Debug/ZeroLevel.Discovery.csproj.CoreCompileInputs.cache b/ZeroLevel.Discovery/obj/Debug/ZeroLevel.Discovery.csproj.CoreCompileInputs.cache index 9e86bbc..e40d599 100644 --- a/ZeroLevel.Discovery/obj/Debug/ZeroLevel.Discovery.csproj.CoreCompileInputs.cache +++ b/ZeroLevel.Discovery/obj/Debug/ZeroLevel.Discovery.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -e6d14b54c463a8096220ac67f9a339de12a3fb4a +baf2f9d75e4982e81a51362dec180283f7786a6a diff --git a/ZeroLevel.Discovery/obj/Debug/ZeroLevel.Discovery.csprojAssemblyReference.cache b/ZeroLevel.Discovery/obj/Debug/ZeroLevel.Discovery.csprojAssemblyReference.cache index 34790e8f6264c689ca693d088304db9873f5a209..f9dc36271a2e31502c831417eb9e4d3ac16169e2 100644 GIT binary patch literal 179314 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%0DmJHQs4%G^R>O&2chDtzn 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 t!Hzi%X!VYz04>tt0< diff --git a/ZeroLevel.Discovery/packages.config b/ZeroLevel.Discovery/packages.config index b1d1905..584a933 100644 --- a/ZeroLevel.Discovery/packages.config +++ b/ZeroLevel.Discovery/packages.config @@ -7,6 +7,6 @@ - + \ No newline at end of file diff --git a/ZeroLevel/Services/Application/BaseWindowsExService.cs b/ZeroLevel/Services/Application/BaseWindowsExService.cs index 65aeeae..ad468ba 100644 --- a/ZeroLevel/Services/Application/BaseWindowsExService.cs +++ b/ZeroLevel/Services/Application/BaseWindowsExService.cs @@ -29,7 +29,26 @@ namespace ZeroLevel.Services.Applications var discoveryProtocol = _config.FirstOrDefault("discoveryProtocol", "socket"); _exchange = new Exchange(new DiscoveryClient(discoveryProtocol, discovery)); + } + private IExService _self_service = null; + private readonly object _self_create_lock = new object(); + protected IExService Self + { + get + { + if (_self_service == null) + { + lock (_self_create_lock) + { + if (_self_service == null) + { + _self_service = _exchange.RegisterService(this); + } + } + } + return _self_service; + } } #region Config diff --git a/ZeroLevel/Services/Application/BaseWindowsService.cs b/ZeroLevel/Services/Application/BaseWindowsService.cs index 20a7936..2572f5f 100644 --- a/ZeroLevel/Services/Application/BaseWindowsService.cs +++ b/ZeroLevel/Services/Application/BaseWindowsService.cs @@ -28,9 +28,13 @@ namespace ZeroLevel.Services.Applications { InteraciveModeWorkingFlag.Reset(); OnStart(args); - while (false == InteraciveModeWorkingFlag.WaitOne(2000)) + try { + while (false == InteraciveModeWorkingFlag.WaitOne(2000)) + { + } } + catch { } } #region IZeroService diff --git a/ZeroLevel/Services/Network/Contract/IExService.cs b/ZeroLevel/Services/Network/Contract/IExService.cs index c8437e7..9b5824f 100644 --- a/ZeroLevel/Services/Network/Contract/IExService.cs +++ b/ZeroLevel/Services/Network/Contract/IExService.cs @@ -16,5 +16,12 @@ namespace ZeroLevel.Network /// Replier without request /// void RegisterInbox(string inbox, Func handler); + +/* +DEFAULT INBOXES +*/ + void RegisterInbox(Action handler); + void RegisterInbox(Func handler); + void RegisterInbox(Func handler); } } \ No newline at end of file diff --git a/ZeroLevel/Services/Network/NetUtils.cs b/ZeroLevel/Services/Network/NetUtils.cs index f1ff5de..32ab76a 100644 --- a/ZeroLevel/Services/Network/NetUtils.cs +++ b/ZeroLevel/Services/Network/NetUtils.cs @@ -53,23 +53,28 @@ namespace ZeroLevel.Network return port; } - public static IPAddress GetNonLoopbackAddress() + public static IPAddress GetNonLoopbackAddress(bool ignore_virtual_devices = true, bool ignore_docker_devices = true) { if (NetworkInterface.GetIsNetworkAvailable()) { foreach (var adapter in NetworkInterface.GetAllNetworkInterfaces()) { - if (adapter.Description.IndexOf("VirtualBox", StringComparison.OrdinalIgnoreCase) >= 0) - continue; - if (adapter.NetworkInterfaceType != NetworkInterfaceType.Ethernet) - continue; - foreach (UnicastIPAddressInformation address in adapter.GetIPProperties().UnicastAddresses) + if (adapter.OperationalStatus == OperationalStatus.Up) { - if (address.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) + if (ignore_virtual_devices && (adapter.Description.IndexOf("Virtual", StringComparison.OrdinalIgnoreCase) >= 0 || adapter.Name.IndexOf("Virtual", StringComparison.OrdinalIgnoreCase) >= 0)) + continue; + if (ignore_docker_devices && (adapter.Description.IndexOf("Docker", StringComparison.OrdinalIgnoreCase) >= 0 || adapter.Name.IndexOf("Docker", StringComparison.OrdinalIgnoreCase) >= 0)) + continue; + if (adapter.NetworkInterfaceType != NetworkInterfaceType.Ethernet) + continue; + foreach (UnicastIPAddressInformation address in adapter.GetIPProperties().UnicastAddresses) { - if (!IPAddress.IsLoopback(address.Address)) + if (address.Address.AddressFamily == AddressFamily.InterNetwork) { - return address.Address; + if (!IPAddress.IsLoopback(address.Address)) + { + return address.Address; + } } } } diff --git a/ZeroLevel/Services/Network/Services/DiscoveryClient.cs b/ZeroLevel/Services/Network/Services/DiscoveryClient.cs index 76041fe..10f9d6e 100644 --- a/ZeroLevel/Services/Network/Services/DiscoveryClient.cs +++ b/ZeroLevel/Services/Network/Services/DiscoveryClient.cs @@ -66,10 +66,42 @@ namespace ZeroLevel.Network _discoveryServerClient.ForceConnect(); if (_discoveryServerClient.Status == ZTransportStatus.Working) { - IEnumerable records = null; try { - var ir = _discoveryServerClient.Request>("services", response => records = response); + var ir = _discoveryServerClient.Request>("services", records => + { + if (records == null) + { + Log.Warning("[DiscoveryClient] UpdateServiceListInfo. Discrovery response is empty"); + return; + } + _lock.EnterWriteLock(); + try + { + _tableByGroups.Clear(); + _tableByTypes.Clear(); + var keysToRemove = new List(_tableByKey.Keys); + foreach (var info in records) + { + var key = info.ServiceKey.Trim().ToLowerInvariant(); + UpdateOrAddRecord(key, info); + keysToRemove.Remove(key); + } + foreach (var key in keysToRemove) + { + _tableByKey.TryRemove(key, out RoundRobinCollection removed); + removed.Dispose(); + } + } + catch (Exception ex) + { + Log.Error(ex, "[DiscoveryClient] UpdateServiceListInfo. Update local routing table error."); + } + finally + { + _lock.ExitWriteLock(); + } + }); if (!ir.Success) { Log.Warning($"[DiscoveryClient] UpdateServiceListInfo. Error request to inbox 'services'. {ir.Comment}"); @@ -81,37 +113,6 @@ namespace ZeroLevel.Network Log.Error(ex, "[DiscoveryClient] UpdateServiceListInfo. Discrovery service response is absent"); return; } - if (records == null) - { - Log.Warning("[DiscoveryClient] UpdateServiceListInfo. Discrovery response is empty"); - return; - } - _lock.EnterWriteLock(); - try - { - _tableByGroups.Clear(); - _tableByTypes.Clear(); - var keysToRemove = new List(_tableByKey.Keys); - foreach (var info in records) - { - var key = info.ServiceKey.Trim().ToLowerInvariant(); - UpdateOrAddRecord(key, info); - keysToRemove.Remove(key); - } - foreach (var key in keysToRemove) - { - _tableByKey.TryRemove(key, out RoundRobinCollection removed); - removed.Dispose(); - } - } - catch (Exception ex) - { - Log.Error(ex, "[DiscoveryClient] UpdateServiceListInfo. Update local routing table error."); - } - finally - { - _lock.ExitWriteLock(); - } } else { diff --git a/ZeroLevel/obj/Debug/ZeroLevel.csproj.CoreCompileInputs.cache b/ZeroLevel/obj/Debug/ZeroLevel.csproj.CoreCompileInputs.cache index b62c01d..9fb1091 100644 --- a/ZeroLevel/obj/Debug/ZeroLevel.csproj.CoreCompileInputs.cache +++ b/ZeroLevel/obj/Debug/ZeroLevel.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -35db55177c262262ace2e47d49fa51ff7b48a736 +44e8c5c8420f166261f61c4c11d319a8acdc2c79