diff --git a/ZeroLevel.EventServer/EventRepository.cs b/ZeroLevel.EventServer/EventRepository.cs
new file mode 100644
index 0000000..5e0c1c6
--- /dev/null
+++ b/ZeroLevel.EventServer/EventRepository.cs
@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using System.Data.SQLite;
+using System.Text;
+using System.Threading;
+using ZeroLevel.SqLite;
+
+namespace ZeroLevel.EventServer
+{
+ public class EventRepository
+ :BaseSqLiteDB
+ {
+ private readonly SQLiteConnection _db;
+ private readonly ReaderWriterLockSlim _rwLock = new ReaderWriterLockSlim();
+ private readonly string _tableName;
+
+ public EventRepository()
+ {
+ _tableName = "events";
+
+ var path = PrepareDb($"{_tableName}.db");
+ _db = new SQLiteConnection($"Data Source={path};Version=3;");
+ _db.Open();
+
+ Execute($"CREATE TABLE IF NOT EXISTS {_tableName} (id INTEGER PRIMARY KEY AUTOINCREMENT, key TEXT, body BLOB)", _db);
+ Execute($"CREATE INDEX IF NOT EXISTS key_index ON {_tableName} (key)", _db);
+ }
+ }
+}
diff --git a/ZeroLevel.EventServer/EventService.cs b/ZeroLevel.EventServer/EventService.cs
new file mode 100644
index 0000000..8762bbb
--- /dev/null
+++ b/ZeroLevel.EventServer/EventService.cs
@@ -0,0 +1,61 @@
+using ZeroLevel.Network;
+using ZeroLevel.Services.Applications;
+
+namespace ZeroLevel.EventServer
+{
+ public class EventService
+ : BaseZeroService
+ {
+ public EventService()
+ {
+ }
+
+ protected override void StartAction()
+ {
+ var host = UseHost();
+ this.AutoregisterInboxes(host);
+ host.OnConnect += Host_OnConnect;
+ host.OnDisconnect += Host_OnDisconnect;
+ }
+
+ private void Host_OnDisconnect(ISocketClient obj)
+ {
+ Log.Info($"Client '{obj.Endpoint.Address}:{obj.Endpoint.Port}' disconnected");
+ }
+
+ private void Host_OnConnect(IClient obj)
+ {
+ Log.Info($"Client '{obj.Socket.Endpoint.Address}:{obj.Socket.Endpoint.Port}' connected");
+ }
+
+ protected override void StopAction()
+ {
+ }
+
+ #region Inboxes
+ [ExchangeReplier("onetime")]
+ public long OneTimeHandler(ISocketClient client, OneTimeEvent e)
+ {
+ return 0;
+ }
+
+ [ExchangeReplier("periodic")]
+ public long PeriodicHandler(ISocketClient client, PeriodicTimeEvent e)
+ {
+ return 0;
+ }
+
+ [ExchangeReplier("eventtrigger")]
+ public long AfterEventHandler(ISocketClient client, EventAfterEvent e)
+ {
+ return 0;
+ }
+
+ [ExchangeReplier("eventstrigger")]
+ public long AfterEventsHandler(ISocketClient client, EventAfterEvents e)
+ {
+ return 0;
+ }
+ #endregion
+ }
+}
diff --git a/ZeroLevel.EventServer/Model/BaseEvent.cs b/ZeroLevel.EventServer/Model/BaseEvent.cs
new file mode 100644
index 0000000..1ba11bd
--- /dev/null
+++ b/ZeroLevel.EventServer/Model/BaseEvent.cs
@@ -0,0 +1,8 @@
+namespace ZeroLevel.EventServer.Model
+{
+ public abstract class BaseEvent
+ {
+ public string ServiceKey { get; set; }
+ public string Inbox { get; set; }
+ }
+}
diff --git a/ZeroLevel.EventServer/Model/Condition.cs b/ZeroLevel.EventServer/Model/Condition.cs
new file mode 100644
index 0000000..0a7f365
--- /dev/null
+++ b/ZeroLevel.EventServer/Model/Condition.cs
@@ -0,0 +1,23 @@
+namespace ZeroLevel.EventServer.Model
+{
+ public enum Condition
+ : int
+ {
+ ///
+ /// В любом случае
+ ///
+ None = 0,
+ ///
+ /// Если хотя бы одно событие успешно обработано
+ ///
+ OneSuccessfull = 1,
+ ///
+ /// Если обработаны все события
+ ///
+ AllSuccessfull = 2,
+ ///
+ /// Если хотя бы одно событие не обработано
+ ///
+ AnyFault = 3
+ }
+}
diff --git a/ZeroLevel.EventServer/Model/EventAfterEvent.cs b/ZeroLevel.EventServer/Model/EventAfterEvent.cs
new file mode 100644
index 0000000..3df207f
--- /dev/null
+++ b/ZeroLevel.EventServer/Model/EventAfterEvent.cs
@@ -0,0 +1,10 @@
+namespace ZeroLevel.EventServer.Model
+{
+ public class EventAfterEvent
+ : BaseEvent
+ {
+ public long EventId { get; set; }
+
+ public Condition Confition { get; set; }
+ }
+}
diff --git a/ZeroLevel.EventServer/Model/EventAfterEvents.cs b/ZeroLevel.EventServer/Model/EventAfterEvents.cs
new file mode 100644
index 0000000..9229d1a
--- /dev/null
+++ b/ZeroLevel.EventServer/Model/EventAfterEvents.cs
@@ -0,0 +1,12 @@
+using System.Collections.Generic;
+
+namespace ZeroLevel.EventServer.Model
+{
+ public class EventAfterEvents
+ : BaseEvent
+ {
+ public IEnumerable EventIds { get; set; }
+
+ public Condition Confition { get; set; }
+ }
+}
diff --git a/ZeroLevel.EventServer/Model/EventInfoRecord.cs b/ZeroLevel.EventServer/Model/EventInfoRecord.cs
new file mode 100644
index 0000000..207e339
--- /dev/null
+++ b/ZeroLevel.EventServer/Model/EventInfoRecord.cs
@@ -0,0 +1,13 @@
+namespace ZeroLevel.EventServer
+{
+ public class EventInfoRecord
+ {
+ public long EventId { get; set; }
+
+ public string ServiceKey { get; set; }
+ // OR
+ public string ServiceEndpoint { get; set; }
+
+ public string Inbox { get; set; }
+ }
+}
diff --git a/ZeroLevel.EventServer/Model/EventResult.cs b/ZeroLevel.EventServer/Model/EventResult.cs
new file mode 100644
index 0000000..406a0c0
--- /dev/null
+++ b/ZeroLevel.EventServer/Model/EventResult.cs
@@ -0,0 +1,10 @@
+namespace ZeroLevel.EventServer.Model
+{
+ public class EventResult
+ {
+ public long EventId;
+ public EventResultState State;
+ public long StartTimestamp;
+ public long EndTimestamp;
+ }
+}
diff --git a/ZeroLevel.EventServer/Model/EventResultState.cs b/ZeroLevel.EventServer/Model/EventResultState.cs
new file mode 100644
index 0000000..7c418b5
--- /dev/null
+++ b/ZeroLevel.EventServer/Model/EventResultState.cs
@@ -0,0 +1,9 @@
+namespace ZeroLevel.EventServer.Model
+{
+ public enum EventResultState
+ {
+ InProgress,
+ Success,
+ Unsuccess
+ }
+}
diff --git a/ZeroLevel.EventServer/Model/EventType.cs b/ZeroLevel.EventServer/Model/EventType.cs
new file mode 100644
index 0000000..85f2688
--- /dev/null
+++ b/ZeroLevel.EventServer/Model/EventType.cs
@@ -0,0 +1,11 @@
+namespace ZeroLevel.EventServer.Model
+{
+ public enum EventType
+ : int
+ {
+ OneType = 0,
+ Periodic = 1,
+ EventTrigger = 2,
+ EventsTrigger = 3
+ }
+}
diff --git a/ZeroLevel.EventServer/Model/OneTimeEvent.cs b/ZeroLevel.EventServer/Model/OneTimeEvent.cs
new file mode 100644
index 0000000..590c6b5
--- /dev/null
+++ b/ZeroLevel.EventServer/Model/OneTimeEvent.cs
@@ -0,0 +1,10 @@
+using System;
+
+namespace ZeroLevel.EventServer.Model
+{
+ public class OneTimeEvent
+ : BaseEvent
+ {
+ public TimeSpan Period { get; set; }
+ }
+}
diff --git a/ZeroLevel.EventServer/Model/PeriodicTimeEvent.cs b/ZeroLevel.EventServer/Model/PeriodicTimeEvent.cs
new file mode 100644
index 0000000..c165591
--- /dev/null
+++ b/ZeroLevel.EventServer/Model/PeriodicTimeEvent.cs
@@ -0,0 +1,10 @@
+using System;
+
+namespace ZeroLevel.EventServer.Model
+{
+ public class PeriodicTimeEvent
+ : BaseEvent
+ {
+ public TimeSpan Period { get; set; }
+ }
+}
diff --git a/ZeroLevel.EventServer/Program.cs b/ZeroLevel.EventServer/Program.cs
new file mode 100644
index 0000000..62d2c7c
--- /dev/null
+++ b/ZeroLevel.EventServer/Program.cs
@@ -0,0 +1,15 @@
+namespace ZeroLevel.EventServer
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ Bootstrap.Startup(args, configuration: () => Configuration.ReadOrEmptySetFromIniFile("config.ini"))
+ .EnableConsoleLog()
+ .UseDiscovery()
+ .Run()
+ .WaitWhileStatus(ZeroServiceStatus.Running);
+ Bootstrap.Shutdown();
+ }
+ }
+}
diff --git a/ZeroLevel.EventServer/ZeroLevel.EventServer.csproj b/ZeroLevel.EventServer/ZeroLevel.EventServer.csproj
new file mode 100644
index 0000000..c57316f
--- /dev/null
+++ b/ZeroLevel.EventServer/ZeroLevel.EventServer.csproj
@@ -0,0 +1,23 @@
+
+
+
+ Exe
+ netcoreapp3.1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Always
+
+
+
+
diff --git a/ZeroLevel.EventServer/config.ini b/ZeroLevel.EventServer/config.ini
new file mode 100644
index 0000000..7fc2d70
--- /dev/null
+++ b/ZeroLevel.EventServer/config.ini
@@ -0,0 +1 @@
+discovery=localhost:9030
diff --git a/ZeroLevel.sln b/ZeroLevel.sln
index 094539c..8b3c521 100644
--- a/ZeroLevel.sln
+++ b/ZeroLevel.sln
@@ -39,7 +39,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ZeroLevel.Logger", "ZeroLev
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ZeroLevel.WPF", "ZeroLevel.WPF\ZeroLevel.WPF.csproj", "{0D70D688-1E21-4E9D-AA49-4D255DF27D8D}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZeroLevel.SqLite", "ZeroLevel.SqLite\ZeroLevel.SqLite.csproj", "{5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ZeroLevel.SqLite", "ZeroLevel.SqLite\ZeroLevel.SqLite.csproj", "{5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZeroLevel.EventServer", "ZeroLevel.EventServer\ZeroLevel.EventServer.csproj", "{F8116106-48FD-4F1B-A1D2-63FE81DAFD8E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -255,6 +257,18 @@ Global
{5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Release|x64.Build.0 = Release|Any CPU
{5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Release|x86.ActiveCfg = Release|Any CPU
{5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Release|x86.Build.0 = Release|Any CPU
+ {F8116106-48FD-4F1B-A1D2-63FE81DAFD8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F8116106-48FD-4F1B-A1D2-63FE81DAFD8E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F8116106-48FD-4F1B-A1D2-63FE81DAFD8E}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {F8116106-48FD-4F1B-A1D2-63FE81DAFD8E}.Debug|x64.Build.0 = Debug|Any CPU
+ {F8116106-48FD-4F1B-A1D2-63FE81DAFD8E}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {F8116106-48FD-4F1B-A1D2-63FE81DAFD8E}.Debug|x86.Build.0 = Debug|Any CPU
+ {F8116106-48FD-4F1B-A1D2-63FE81DAFD8E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F8116106-48FD-4F1B-A1D2-63FE81DAFD8E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F8116106-48FD-4F1B-A1D2-63FE81DAFD8E}.Release|x64.ActiveCfg = Release|Any CPU
+ {F8116106-48FD-4F1B-A1D2-63FE81DAFD8E}.Release|x64.Build.0 = Release|Any CPU
+ {F8116106-48FD-4F1B-A1D2-63FE81DAFD8E}.Release|x86.ActiveCfg = Release|Any CPU
+ {F8116106-48FD-4F1B-A1D2-63FE81DAFD8E}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/ZeroLevel/Services/BaseZeroService.cs b/ZeroLevel/Services/BaseZeroService.cs
index fdb99bd..281b599 100644
--- a/ZeroLevel/Services/BaseZeroService.cs
+++ b/ZeroLevel/Services/BaseZeroService.cs
@@ -133,34 +133,37 @@ namespace ZeroLevel.Services.Applications
#region Network
- public void UseDiscovery()
+ public bool UseDiscovery()
{
if (_state == ZeroServiceStatus.Running
|| _state == ZeroServiceStatus.Initialized)
{
ReadServiceInfo();
- _exhange.UseDiscovery();
+ return _exhange.UseDiscovery();
}
+ return false;
}
- public void UseDiscovery(string endpoint)
+ public bool UseDiscovery(string endpoint)
{
if (_state == ZeroServiceStatus.Running
|| _state == ZeroServiceStatus.Initialized)
{
ReadServiceInfo();
- _exhange.UseDiscovery(endpoint);
+ return _exhange.UseDiscovery(endpoint);
}
+ return false;
}
- public void UseDiscovery(IPEndPoint endpoint)
+ public bool UseDiscovery(IPEndPoint endpoint)
{
if (_state == ZeroServiceStatus.Running
|| _state == ZeroServiceStatus.Initialized)
{
ReadServiceInfo();
- _exhange.UseDiscovery(endpoint);
+ return _exhange.UseDiscovery(endpoint);
}
+ return false;
}
public IRouter UseHost()
diff --git a/ZeroLevel/Services/Config/Configuration.cs b/ZeroLevel/Services/Config/Configuration.cs
index 0f10be4..37fe605 100644
--- a/ZeroLevel/Services/Config/Configuration.cs
+++ b/ZeroLevel/Services/Config/Configuration.cs
@@ -2,8 +2,6 @@
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO;
-using System.Linq;
-using System.Reflection;
using ZeroLevel.Services.Config;
using ZeroLevel.Services.Config.Implementation;
using ZeroLevel.Services.Reflection;
@@ -137,52 +135,257 @@ namespace ZeroLevel
/// Creating a configuration from the AppSettings section of the app.config or web.config file
///
/// Configuration
- public static IConfiguration ReadFromApplicationConfig() { return new ApplicationConfigReader().ReadConfiguration(); }
+ public static IConfiguration ReadFromApplicationConfig()
+ {
+ try
+ {
+ return new ApplicationConfigReader().ReadConfiguration();
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, $"[Configuration.ReadFromApplicationConfig] Can't read app.config file");
+ throw;
+ }
+ }
+ public static IConfiguration ReadOrEmptyFromApplicationConfig()
+ {
+ try
+ {
+ return new ApplicationConfigReader().ReadConfiguration();
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, $"[Configuration.ReadOrEmptyFromApplicationConfig] Can't read app.config file");
+ }
+ return _empty;
+ }
///
/// Creating a configuration from the AppSettings section of the app.config file or web.config, is supplemented by the 'ConnectionStrings' section
///
/// Configuration
- public static IConfigurationSet ReadSetFromApplicationConfig() { return new ApplicationConfigReader().ReadConfigurationSet(); }
+ public static IConfigurationSet ReadSetFromApplicationConfig()
+ {
+ try
+ {
+ return new ApplicationConfigReader().ReadConfigurationSet();
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, $"[Configuration.ReadSetFromApplicationConfig] Can't read app.config file");
+ throw;
+ }
+ }
+ public static IConfigurationSet ReadOrEmptySetFromApplicationConfig()
+ {
+ try
+ {
+ return new ApplicationConfigReader().ReadConfigurationSet();
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, $"[Configuration.ReadOrEmptySetFromApplicationConfig] Can't read app.config file");
+ }
+ return _emptySet;
+ }
///
/// Creating a configuration from the AppSettings section of the app.config or web.config file
///
/// Configuration
- public static IConfiguration ReadFromApplicationConfig(string configFilePath) { return new ApplicationConfigReader(configFilePath).ReadConfiguration(); }
+ public static IConfiguration ReadFromApplicationConfig(string configFilePath)
+ {
+ try
+ {
+ return new ApplicationConfigReader(configFilePath).ReadConfiguration();
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, $"[Configuration.ReadFromApplicationConfig] Can't read config file '{configFilePath}'");
+ throw;
+ }
+ }
+ public static IConfiguration ReadOrEmptyFromApplicationConfig(string configFilePath)
+ {
+ try
+ {
+ return new ApplicationConfigReader(configFilePath).ReadConfiguration();
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, $"[Configuration.ReadOrEmptyFromApplicationConfig] Can't read config file '{configFilePath}'");
+ }
+ return _empty;
+ }
///
/// Creating a configuration from the AppSettings section of the app.config file or web.config, is supplemented by the 'ConnectionStrings' section
///
/// Configuration
- public static IConfigurationSet ReadSetFromApplicationConfig(string configFilePath) { return new ApplicationConfigReader(configFilePath).ReadConfigurationSet(); }
+ public static IConfigurationSet ReadSetFromApplicationConfig(string configFilePath)
+ {
+ try
+ {
+ return new ApplicationConfigReader(configFilePath).ReadConfigurationSet();
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, $"[Configuration.ReadSetFromApplicationConfig] Can't read config file '{configFilePath}'");
+ throw;
+ }
+ }
+ public static IConfigurationSet ReadOrEmptySetFromApplicationConfig(string configFilePath)
+ {
+ try
+ {
+ return new ApplicationConfigReader(configFilePath).ReadConfigurationSet();
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, $"[Configuration.ReadOrEmptySetFromApplicationConfig] Can't read config file '{configFilePath}'");
+ }
+ return _emptySet;
+ }
///
/// Create configuration from ini file
///
/// Path to the ini file
/// Configuration
- public static IConfiguration ReadFromIniFile(string path) { return new IniFileReader(path).ReadConfiguration(); }
+ public static IConfiguration ReadFromIniFile(string path)
+ {
+ try
+ {
+ return new IniFileReader(path).ReadConfiguration();
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, $"[Configuration.ReadFromIniFile] Can't read config file '{path}'");
+ throw;
+ }
+ }
+ public static IConfiguration ReadOrEmptyFromIniFile(string path)
+ {
+ try
+ {
+ return new IniFileReader(path).ReadConfiguration();
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, $"[Configuration.ReadOrEmptyFromIniFile] Can't read config file '{path}'");
+ }
+ return _empty;
+ }
///
/// Creating a configuration from an ini file, including sections
///
/// Path to the ini file
/// Configuration
- public static IConfigurationSet ReadSetFromIniFile(string path) { return new IniFileReader(path).ReadConfigurationSet(); }
+ public static IConfigurationSet ReadSetFromIniFile(string path)
+ {
+ try
+ {
+ return new IniFileReader(path).ReadConfigurationSet();
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, $"[Configuration.ReadSetFromIniFile] Can't read config file '{path}'");
+ throw;
+ }
+ }
+ public static IConfigurationSet ReadOrEmptySetFromIniFile(string path)
+ {
+ try
+ {
+ return new IniFileReader(path).ReadConfigurationSet();
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, $"[Configuration.ReadOrEmptySetFromIniFile] Can't read config file '{path}'");
+ }
+ return _emptySet;
+ }
///
/// Creating configuration from command line parameters
///
/// Command line parameters
/// Configuration
- public static IConfiguration ReadFromCommandLine(string[] args) { return new CommandLineReader(args).ReadConfiguration(); }
+ public static IConfiguration ReadFromCommandLine(string[] args)
+ {
+ try
+ {
+ return new CommandLineReader(args).ReadConfiguration();
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, $"[Configuration.ReadFromCommandLine] Can't read command line args");
+ throw;
+ }
+ }
+ public static IConfiguration ReadOrEmptyFromCommandLine(string[] args)
+ {
+ try
+ {
+ return new CommandLineReader(args).ReadConfiguration();
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, $"[Configuration.ReadOrEmptyFromCommandLine] Can't read command line args");
+ }
+ return _empty;
+ }
- public static IConfigurationSet ReadBinary(IBinaryReader reader)
+ public static IConfiguration ReadFromBinaryReader(IBinaryReader reader)
{
- return reader.Read();
+ try
+ {
+ return reader.Read();
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, $"[Configuration.ReadFromBinaryReader] Can't read config from binaryReader");
+ throw;
+ }
+ }
+ public static IConfiguration ReadOrEmptyFromBinaryReader(IBinaryReader reader)
+ {
+ try
+ {
+ return reader.Read();
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, $"[Configuration.ReadOrEmptyFromBinaryReader] Can't read config from binaryReader");
+ }
+ return _empty;
}
+ public static IConfigurationSet ReadSetFromBinaryReader(IBinaryReader reader)
+ {
+ try
+ {
+ return reader.Read();
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, $"[Configuration.ReadSetFromBinaryReader] Can't read config from binaryReader");
+ throw;
+ }
+ }
+ public static IConfigurationSet ReadSetOrEmptyFromBinaryReader(IBinaryReader reader)
+ {
+ try
+ {
+ return reader.Read();
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, $"[Configuration.ReadSetOrEmptyFromBinaryReader] Can't read config from binaryReader");
+ }
+ return _emptySet;
+ }
#endregion Read configuration
#region Write configuration
diff --git a/ZeroLevel/Services/IZeroService.cs b/ZeroLevel/Services/IZeroService.cs
index 34b3fcb..6373e71 100644
--- a/ZeroLevel/Services/IZeroService.cs
+++ b/ZeroLevel/Services/IZeroService.cs
@@ -15,10 +15,10 @@ namespace ZeroLevel
ZeroServiceInfo ServiceInfo { get; }
- void UseDiscovery();
- void UseDiscovery(string url);
- void UseDiscovery(IPEndPoint endpoint);
-
+ bool UseDiscovery();
+ bool UseDiscovery(string url);
+ bool UseDiscovery(IPEndPoint endpoint);
+
IRouter UseHost();
IRouter UseHost(int port);
IRouter UseHost(IPEndPoint endpoint);
diff --git a/ZeroLevel/Services/Network/Contracts/IExchange.cs b/ZeroLevel/Services/Network/Contracts/IExchange.cs
index 1480c9d..440885b 100644
--- a/ZeroLevel/Services/Network/Contracts/IExchange.cs
+++ b/ZeroLevel/Services/Network/Contracts/IExchange.cs
@@ -6,9 +6,9 @@ namespace ZeroLevel.Network
public interface IExchange
: IClientSet, IDisposable
{
- void UseDiscovery();
- void UseDiscovery(string endpoint);
- void UseDiscovery(IPEndPoint endpoint);
+ bool UseDiscovery();
+ bool UseDiscovery(string endpoint);
+ bool UseDiscovery(IPEndPoint endpoint);
IRouter UseHost();
IRouter UseHost(int port);
diff --git a/ZeroLevel/Services/Network/Exchange.cs b/ZeroLevel/Services/Network/Exchange.cs
index f9a24c7..ccef053 100644
--- a/ZeroLevel/Services/Network/Exchange.cs
+++ b/ZeroLevel/Services/Network/Exchange.cs
@@ -431,45 +431,31 @@ namespace ZeroLevel.Network
private static TimeSpan _update_discovery_table_period = TimeSpan.FromSeconds(15);
private static TimeSpan _register_in_discovery_table_period = TimeSpan.FromSeconds(15);
- public void UseDiscovery()
+ private bool _UseDiscovery(Func epf)
{
+ if (epf == null) return false;
try
{
- var discoveryEndpoint = Configuration.Default.First("discovery");
- _user_aliases.Set(BaseSocket.DISCOVERY_ALIAS, NetUtils.CreateIPEndPoint(discoveryEndpoint));
+ var ep = epf.Invoke();
+ _user_aliases.Set(BaseSocket.DISCOVERY_ALIAS, ep);
RestartDiscoveryTasks();
+ return true;
}
catch (Exception ex)
{
- Log.Error(ex, "[Exchange.UseDiscovery]");
+ Log.Error(ex, $"[Exchange.UseDiscovery]");
}
+ return false;
}
- public void UseDiscovery(string discoveryEndpoint)
- {
- try
- {
- _user_aliases.Set(BaseSocket.DISCOVERY_ALIAS, NetUtils.CreateIPEndPoint(discoveryEndpoint));
- RestartDiscoveryTasks();
- }
- catch (Exception ex)
- {
- Log.Error(ex, "[Exchange.UseDiscovery]");
- }
- }
+ public bool UseDiscovery() =>
+ _UseDiscovery(() => NetUtils.CreateIPEndPoint(Configuration.Default.First("discovery")));
- public void UseDiscovery(IPEndPoint discoveryEndpoint)
- {
- try
- {
- _user_aliases.Set(BaseSocket.DISCOVERY_ALIAS, discoveryEndpoint);
- RestartDiscoveryTasks();
- }
- catch (Exception ex)
- {
- Log.Error(ex, "[Exchange.UseDiscovery]");
- }
- }
+ public bool UseDiscovery(string discoveryEndpoint) =>
+ _UseDiscovery(() => NetUtils.CreateIPEndPoint(discoveryEndpoint));
+
+ public bool UseDiscovery(IPEndPoint discoveryEndpoint) =>
+ _UseDiscovery(() => discoveryEndpoint);
private void RestartDiscoveryTasks()
{