Refactoring

pull/1/head
Ogoun 6 years ago
parent 4a0fd04513
commit c12a54f3b2

@ -14,6 +14,10 @@
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

@ -40,7 +40,7 @@ namespace ZeroLevel.Discovery
_exInbox.RegisterInbox<IEnumerable<ServiceEndpointsInfo>>("services", (_, __) => routeTable.Get());
_exInbox.RegisterInbox<ExServiceInfo, InvokeResult>("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()

@ -42,8 +42,8 @@
<Reference Include="Microsoft.Owin.Hosting, Version=4.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Owin.Hosting.4.0.1\lib\net45\Microsoft.Owin.Hosting.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.6.0.4\lib\net45\Newtonsoft.Json.dll</HintPath>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>C:\Users\a.bozhenov\source\repos\ZeroTests\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
<HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>

@ -1 +1 @@
e6d14b54c463a8096220ac67f9a339de12a3fb4a
baf2f9d75e4982e81a51362dec180283f7786a6a

@ -7,6 +7,6 @@
<package id="Microsoft.Owin" version="4.0.1" targetFramework="net472" />
<package id="Microsoft.Owin.Host.HttpListener" version="4.0.1" targetFramework="net472" />
<package id="Microsoft.Owin.Hosting" version="4.0.1" targetFramework="net472" />
<package id="Newtonsoft.Json" version="6.0.4" targetFramework="net472" />
<package id="Newtonsoft.Json" version="12.0.1" targetFramework="net472" />
<package id="Owin" version="1.0" targetFramework="net472" />
</packages>

@ -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

@ -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

@ -16,5 +16,12 @@ namespace ZeroLevel.Network
/// Replier without request
/// </summary>
void RegisterInbox<Tresp>(string inbox, Func<long, IZBackward, Tresp> handler);
/*
DEFAULT INBOXES
*/
void RegisterInbox<T>(Action<T, long, IZBackward> handler);
void RegisterInbox<Treq, Tresp>(Func<Treq, long, IZBackward, Tresp> handler);
void RegisterInbox<Tresp>(Func<long, IZBackward, Tresp> handler);
}
}

@ -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;
}
}
}
}

@ -66,10 +66,42 @@ namespace ZeroLevel.Network
_discoveryServerClient.ForceConnect();
if (_discoveryServerClient.Status == ZTransportStatus.Working)
{
IEnumerable<ServiceEndpointsInfo> records = null;
try
{
var ir = _discoveryServerClient.Request<IEnumerable<ServiceEndpointsInfo>>("services", response => records = response);
var ir = _discoveryServerClient.Request<IEnumerable<ServiceEndpointsInfo>>("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<string>(_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<ServiceEndpointInfo> 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<string>(_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<ServiceEndpointInfo> removed);
removed.Dispose();
}
}
catch (Exception ex)
{
Log.Error(ex, "[DiscoveryClient] UpdateServiceListInfo. Update local routing table error.");
}
finally
{
_lock.ExitWriteLock();
}
}
else
{

@ -1 +1 @@
35db55177c262262ace2e47d49fa51ff7b48a736
44e8c5c8420f166261f61c4c11d319a8acdc2c79

Loading…
Cancel
Save

Powered by TurnKey Linux.