diff --git a/ConnectionTest/Client/Client.csproj b/ConnectionTest/Client/Client.csproj
index f90f0c0..4a3a678 100644
--- a/ConnectionTest/Client/Client.csproj
+++ b/ConnectionTest/Client/Client.csproj
@@ -3,6 +3,7 @@
Exe
netcoreapp3.1
+ AnyCPU;x64
diff --git a/ConnectionTest/Server/Server.csproj b/ConnectionTest/Server/Server.csproj
index f90f0c0..4a3a678 100644
--- a/ConnectionTest/Server/Server.csproj
+++ b/ConnectionTest/Server/Server.csproj
@@ -3,6 +3,7 @@
Exe
netcoreapp3.1
+ AnyCPU;x64
diff --git a/ZeroLevel.sln b/ZeroLevel.sln
index 72c7ae5..1054288 100644
--- a/ZeroLevel.sln
+++ b/ZeroLevel.sln
@@ -53,9 +53,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FileTransferServer", "FileT
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ConnectionTest", "ConnectionTest", "{D5207A5A-2F27-4992-9BA5-0BDCFC59F133}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Client", "ConnectionTest\Client\Client.csproj", "{08CDD42E-E324-40A4-88C3-EDD0493AAF84}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Client", "ConnectionTest\Client\Client.csproj", "{08CDD42E-E324-40A4-88C3-EDD0493AAF84}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Server", "ConnectionTest\Server\Server.csproj", "{3496A688-0749-48C2-BD60-ABB42A5C17C9}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Server", "ConnectionTest\Server\Server.csproj", "{3496A688-0749-48C2-BD60-ABB42A5C17C9}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -255,8 +255,8 @@ Global
{08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Debug|x86.Build.0 = Debug|Any CPU
{08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Release|Any CPU.ActiveCfg = Release|Any CPU
{08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Release|Any CPU.Build.0 = Release|Any CPU
- {08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Release|x64.ActiveCfg = Release|Any CPU
- {08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Release|x64.Build.0 = Release|Any CPU
+ {08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Release|x64.ActiveCfg = Release|x64
+ {08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Release|x64.Build.0 = Release|x64
{08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Release|x86.ActiveCfg = Release|Any CPU
{08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Release|x86.Build.0 = Release|Any CPU
{3496A688-0749-48C2-BD60-ABB42A5C17C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -267,8 +267,8 @@ Global
{3496A688-0749-48C2-BD60-ABB42A5C17C9}.Debug|x86.Build.0 = Debug|Any CPU
{3496A688-0749-48C2-BD60-ABB42A5C17C9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3496A688-0749-48C2-BD60-ABB42A5C17C9}.Release|Any CPU.Build.0 = Release|Any CPU
- {3496A688-0749-48C2-BD60-ABB42A5C17C9}.Release|x64.ActiveCfg = Release|Any CPU
- {3496A688-0749-48C2-BD60-ABB42A5C17C9}.Release|x64.Build.0 = Release|Any CPU
+ {3496A688-0749-48C2-BD60-ABB42A5C17C9}.Release|x64.ActiveCfg = Release|x64
+ {3496A688-0749-48C2-BD60-ABB42A5C17C9}.Release|x64.Build.0 = Release|x64
{3496A688-0749-48C2-BD60-ABB42A5C17C9}.Release|x86.ActiveCfg = Release|Any CPU
{3496A688-0749-48C2-BD60-ABB42A5C17C9}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
diff --git a/ZeroLevel/Services/FileSystem/PeriodicFileSystemWatcher.cs b/ZeroLevel/Services/FileSystem/PeriodicFileSystemWatcher.cs
index 6a13060..8f0a806 100644
--- a/ZeroLevel/Services/FileSystem/PeriodicFileSystemWatcher.cs
+++ b/ZeroLevel/Services/FileSystem/PeriodicFileSystemWatcher.cs
@@ -65,61 +65,68 @@ namespace ZeroLevel.Services.FileSystem
private void CheckSourceFolder()
{
+ string[] files = null;
try
{
- var files = GetFilesFromSource();
- OnStartMovingFilesToTemporary?.Invoke(files.Length);
- foreach (var file in files)
+ files = GetFilesFromSource();
+ }
+ catch (Exception ex)
+ {
+ Log.SystemError(ex, $"[PeriodicFileSystemWatcher.CheckSourceFolder] Failed to process input directory '{_sourceFolder}'");
+ }
+ if (files == null || files.Length == 0)
+ {
+ return;
+ }
+ OnStartMovingFilesToTemporary?.Invoke(files.Length);
+ foreach (var file in files)
+ {
+ try
{
+ Log.Debug($"[PeriodicFileSystemWatcher.CheckSourceFolder] Find new file {file}");
+ if (FSUtils.IsFileLocked(new FileInfo(file)))
+ {
+ continue;
+ }
+ string tempFile;
try
{
- Log.Debug($"[PeriodicFileSystemWatcher.CheckSourceFolder] Find new file {file}");
- if (FSUtils.IsFileLocked(new FileInfo(file)))
- {
- continue;
- }
- string tempFile;
- try
- {
- tempFile = MoveToTemporary(file);
- }
- catch (Exception ex)
+ tempFile = MoveToTemporary(file);
+ if (string.IsNullOrWhiteSpace(tempFile))
{
- Log.SystemError(ex, $"[PeriodicFileSystemWatcher.CheckSourceFolder] Failed to attempt to move file '{file}' to temporary directory '{_temporaryFolder}'");
+ Log.SystemWarning($"[PeriodicFileSystemWatcher.CheckSourceFolder] Failed to move file '{file}' to temporary directory '{_temporaryFolder}'. Without system error!");
continue;
}
- finally
- {
- OnMovingFileToTemporary?.Invoke();
- }
- Log.Debug($"[PeriodicFileSystemWatcher.CheckSourceFolder] Handle file {file}");
- try
- {
- _callback(new FileMeta(Path.GetFileName(file), tempFile));
- }
- catch (Exception ex)
- {
- Log.SystemError(ex, $"[PeriodicFileSystemWatcher.CheckSourceFolder] Fault callback for file '{tempFile}'");
- }
- if (_autoRemoveTempFileAfterCallback)
- {
- File.Delete(tempFile);
- }
}
catch (Exception ex)
{
- Log.SystemError(ex, $"[PeriodicFileSystemWatcher.CheckSourceFolder] Fault proceed file {file}");
+ Log.SystemError(ex, $"[PeriodicFileSystemWatcher.CheckSourceFolder] Failed to attempt to move file '{file}' to temporary directory '{_temporaryFolder}'");
+ continue;
+ }
+ finally
+ {
+ OnMovingFileToTemporary?.Invoke();
+ }
+ Log.Debug($"[PeriodicFileSystemWatcher.CheckSourceFolder] Handle file {file}");
+ try
+ {
+ _callback(new FileMeta(Path.GetFileName(file), tempFile));
+ }
+ catch (Exception ex)
+ {
+ Log.SystemError(ex, $"[PeriodicFileSystemWatcher.CheckSourceFolder] Fault callback for file '{tempFile}'");
+ }
+ if (_autoRemoveTempFileAfterCallback)
+ {
+ File.Delete(tempFile);
}
}
+ catch (Exception ex)
+ {
+ Log.SystemError(ex, $"[PeriodicFileSystemWatcher.CheckSourceFolder] Fault proceed file {file}");
+ }
}
- catch (Exception ex)
- {
- Log.SystemError(ex, $"[PeriodicFileSystemWatcher.CheckSourceFolder] Failed to process input directory '{_sourceFolder}'");
- }
- finally
- {
- OnCompleteMovingFilesToTemporary?.Invoke();
- }
+ OnCompleteMovingFilesToTemporary?.Invoke();
}
///
@@ -137,8 +144,12 @@ namespace ZeroLevel.Services.FileSystem
tempFile = TrySolveCollision(tempFile);
}
File.Copy(from, tempFile, false);
- File.Delete(from);
- return tempFile;
+ if (File.Exists(tempFile))
+ {
+ File.Delete(from);
+ return tempFile;
+ }
+ return null;
}
///
@@ -177,19 +188,22 @@ namespace ZeroLevel.Services.FileSystem
///
private string[] GetFilesFromSource()
{
+ string[] 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;
+ files = Directory.GetFiles(_sourceFolder, "*.*", _useSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly)
+ ?.Where(f => _extensions.Contains(Path.GetExtension(f).ToLowerInvariant()))
+ ?.ToArray();
}
else
{
- string[] files = Directory.GetFiles(_sourceFolder, "*.*", _useSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);
+ files = Directory.GetFiles(_sourceFolder, "*.*", _useSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);
+ }
+ if (files != null)
+ {
Array.Sort(files, FileNameSortCompare);
- return files;
}
+ return files;
}
///
diff --git a/ZeroLevel/Services/Serialization/MemoryStreamReader.cs b/ZeroLevel/Services/Serialization/MemoryStreamReader.cs
index 968fc88..8898adb 100644
--- a/ZeroLevel/Services/Serialization/MemoryStreamReader.cs
+++ b/ZeroLevel/Services/Serialization/MemoryStreamReader.cs
@@ -22,6 +22,11 @@ namespace ZeroLevel.Services.Serialization
_reverseByteOrder = use_reverse_byte_order;
}
+ ///
+ /// End of stream
+ ///
+ public bool EOS => _stream.Position >= _stream.Length;
+
public MemoryStreamReader(byte[] data)
{
if (data == null)
@@ -41,7 +46,7 @@ namespace ZeroLevel.Services.Serialization
///
public bool ReadBoolean()
{
- if (CheckOutOfRange(_stream, 1))
+ if (CheckOutOfRange(1))
throw new OutOfMemoryException("Array index out of bounds");
return BitConverter.ToBoolean(new byte[1] { ReadByte() }, 0);
}
@@ -51,14 +56,14 @@ namespace ZeroLevel.Services.Serialization
///
public byte ReadByte()
{
- if (CheckOutOfRange(_stream, 1))
+ if (CheckOutOfRange(1))
throw new OutOfMemoryException("Array index out of bounds");
return (byte)_stream.ReadByte();
}
public char ReadChar()
{
- if (CheckOutOfRange(_stream, 2))
+ if (CheckOutOfRange(2))
throw new OutOfMemoryException("Array index out of bounds");
var buffer = ReadBuffer(2);
return BitConverter.ToChar(buffer, 0);
@@ -169,7 +174,7 @@ namespace ZeroLevel.Services.Serialization
public byte[] ReadBuffer(int count)
{
if (count == 0) return null;
- if (CheckOutOfRange(_stream, count))
+ if (CheckOutOfRange(count))
throw new OutOfMemoryException("Array index out of bounds");
var buffer = new byte[count];
var readedCount = _stream.Read(buffer, 0, count);
@@ -227,10 +232,10 @@ namespace ZeroLevel.Services.Serialization
///
/// Check if data reading is outside the stream
///
- private bool CheckOutOfRange(Stream stream, int offset)
+ public bool CheckOutOfRange(int offset)
{
- return (stream.Position + offset) > stream.Length;
- }
+ return (_stream.Position + offset) > _stream.Length;
+ }
#region Extensions
diff --git a/ZeroLevel/ZeroLevel.csproj b/ZeroLevel/ZeroLevel.csproj
index 40cd8ff..c5212cd 100644
--- a/ZeroLevel/ZeroLevel.csproj
+++ b/ZeroLevel/ZeroLevel.csproj
@@ -6,16 +6,16 @@
ogoun
ogoun
- 3.3.4.5
- Fix PeriodicFileSystemWatcher
+ 3.3.4.6
+ Extended the MemoryStreamReader.
https://github.com/ogoun/Zero/wiki
Copyright Ogoun 2020
https://github.com/ogoun/Zero
GitHub
- 3.3.4.5
- 3.3.4.5
+ 3.3.4.6
+ 3.3.4.6
AnyCPU;x64
zero.png