diff --git a/ConnectionTest/Client/Program.cs b/ConnectionTest/Client/Program.cs index 7a2aedc..13e8ba7 100644 --- a/ConnectionTest/Client/Program.cs +++ b/ConnectionTest/Client/Program.cs @@ -1,6 +1,7 @@ using System; +using System.Collections.Generic; +using System.Linq; using System.Net; -using System.Threading; using ZeroLevel; using ZeroLevel.Network; using ZeroLevel.Services.HashFunctions; @@ -65,7 +66,7 @@ namespace Client var ex = Bootstrap.CreateExchange(); var address = ReadIP(); var port = ReadPort(); - var client = ex.GetConnection(new IPEndPoint(address, port)); + ex.RoutesStorage.Set("server", new IPEndPoint(address, port)); uint index = 0; while (true) @@ -75,17 +76,17 @@ namespace Client switch (Console.ReadKey().Key) { case ConsoleKey.Escape: - client?.Dispose(); + ex?.Dispose(); return; } } if (index % 2 == 0) { - SendDataEqParts(client, index, 1024 * 1024 + index * 3 + 1); + SendDataEqParts(ex, index, 1024 + index * 3 + 1); } else { - SendDataDiffParts(client, index, 1024 * 1024 + index * 3 + 1); + SendDataDiffParts(ex.GetConnection("server"), index, 1024 + index * 3 + 1); } index++; } @@ -127,42 +128,26 @@ namespace Client } } - static void SendDataEqParts(IClient client, uint id, uint length) + static void SendDataEqParts(IExchange exchange, uint id, uint length) { var payload = GetByteArray(length); var full_checksum = _hash.Hash(payload); var info = new Info { Checksum = full_checksum, Id = id, Length = length }; - if (client.Request("start", info, res => - { - if (res) - { - Log.Info($"Success start sending packet '{id}'"); - } - else - { - Log.Info($"Fault server start incoming packet '{id}'"); - } - })) + if (exchange.Request("server", "start", info)) { + Log.Info($"Success start sending packet '{id}'"); uint size = 4096; uint offset = 0; - while (offset < payload.Length) { var fragment = GetFragment(id, payload, offset, size); - if (!client.Request("part", fragment, res => + if (!exchange.Request("server", "part", fragment)) { - if (!res) - { Log.Info($"Fault server incoming packet '{id}' fragment. Offset: '{offset}'. Size: '{size}' bytes."); - } - })) - { - Log.Warning($"Can't start send packet '{id}' fragment. Offset: '{offset}'. Size: '{size}' bytes. No connection"); } offset += size; } - client.Send("complete", id); + exchange.Send("server", "complete", id); } else { diff --git a/ConnectionTest/Server/Program.cs b/ConnectionTest/Server/Program.cs index fe98e89..40701f1 100644 --- a/ConnectionTest/Server/Program.cs +++ b/ConnectionTest/Server/Program.cs @@ -68,7 +68,7 @@ namespace Server static void Main(string[] args) { - Log.AddConsoleLogger(ZeroLevel.Logging.LogLevel.Warning); + Log.AddConsoleLogger(ZeroLevel.Logging.LogLevel.FullDebug | ZeroLevel.Logging.LogLevel.System); var ex = Bootstrap.CreateExchange(); var port = ReadPort(); var server = ex.UseHost(port); diff --git a/ZeroLevel/Services/FileSystem/PeriodicFileSystemWatcher.cs b/ZeroLevel/Services/FileSystem/PeriodicFileSystemWatcher.cs index 227746b..6a13060 100644 --- a/ZeroLevel/Services/FileSystem/PeriodicFileSystemWatcher.cs +++ b/ZeroLevel/Services/FileSystem/PeriodicFileSystemWatcher.cs @@ -1,6 +1,8 @@ using System; +using System.Collections.Generic; using System.Globalization; using System.IO; +using System.Linq; namespace ZeroLevel.Services.FileSystem { @@ -12,6 +14,7 @@ namespace ZeroLevel.Services.FileSystem private readonly string _temporaryFolder; private readonly TimeSpan _period; private readonly Action _callback; + private readonly HashSet _extensions; public event Action OnStartMovingFilesToTemporary = delegate { }; public event Action OnMovingFileToTemporary = delegate { }; @@ -21,6 +24,7 @@ namespace ZeroLevel.Services.FileSystem private readonly bool _useSubdirectories = false; public PeriodicFileSystemWatcher(TimeSpan period, string watch_folder, string temp_folder, Action callback + , IEnumerable extensions = null , bool removeTempFileAfterCallback = false , bool useSubdirectories = false) { @@ -32,13 +36,14 @@ namespace ZeroLevel.Services.FileSystem { throw new ArgumentNullException(nameof(callback)); } + _extensions = new HashSet(extensions?.Select(e => e.ToLowerInvariant()) ?? Enumerable.Empty()); _useSubdirectories = useSubdirectories; _autoRemoveTempFileAfterCallback = removeTempFileAfterCallback; _callback = callback; _sourceFolder = watch_folder; _temporaryFolder = temp_folder; _period = period; - if (_temporaryFolder.IndexOf(':') < 0) + if (Path.IsPathRooted(_temporaryFolder) == false) { _temporaryFolder = Path.Combine(Configuration.BaseDirectory, _temporaryFolder); } @@ -172,9 +177,19 @@ namespace ZeroLevel.Services.FileSystem /// private string[] GetFilesFromSource() { - string[] files = Directory.GetFiles(_sourceFolder, "*.*", _useSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly); - Array.Sort(files, FileNameSortCompare); - return files; + if (_extensions.Count > 0) + { + string[] files = Directory.GetFiles(_sourceFolder, "*.*", _useSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly) + .Where(f => _extensions.Contains(Path.GetExtension(f).ToLowerInvariant())).ToArray(); + Array.Sort(files, FileNameSortCompare); + return files; + } + else + { + string[] files = Directory.GetFiles(_sourceFolder, "*.*", _useSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly); + Array.Sort(files, FileNameSortCompare); + return files; + } } /// diff --git a/ZeroLevel/Services/Network/SocketServer.cs b/ZeroLevel/Services/Network/SocketServer.cs index fa6296e..f070d48 100644 --- a/ZeroLevel/Services/Network/SocketServer.cs +++ b/ZeroLevel/Services/Network/SocketServer.cs @@ -75,6 +75,8 @@ namespace ZeroLevel.Network try { var client_socket = _serverSocket.EndAccept(ar); + var ep = client_socket.RemoteEndPoint as IPEndPoint; + Log.SystemInfo($"[ZSocketServer.BeginAcceptCallback] Incoming connection {ep.Address}:{ep.Port}"); _connection_set_lock.EnterWriteLock(); var connection = new SocketClient(client_socket, _router); connection.OnDisconnect += Connection_OnDisconnect; @@ -88,7 +90,7 @@ namespace ZeroLevel.Network } finally { - _connection_set_lock.ExitWriteLock(); + _connection_set_lock.ExitWriteLock(); } try { diff --git a/ZeroLevel/ZeroLevel.csproj b/ZeroLevel/ZeroLevel.csproj index ae7a144..40cd8ff 100644 --- a/ZeroLevel/ZeroLevel.csproj +++ b/ZeroLevel/ZeroLevel.csproj @@ -6,16 +6,16 @@ ogoun ogoun - 3.3.4.4 - Additional options for PeriodicFileSystemWatcher + 3.3.4.5 + Fix PeriodicFileSystemWatcher https://github.com/ogoun/Zero/wiki Copyright Ogoun 2020 https://github.com/ogoun/Zero GitHub - 3.3.4.4 - 3.3.4.4 + 3.3.4.5 + 3.3.4.5 AnyCPU;x64 zero.png