From ec159be0186394490d5171ea89fa40bd8c7cfbb7 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 14 Feb 2022 21:19:04 +0300 Subject: [PATCH] Append new functions Seriazlization: append types DateOnly and TimeOnly FSUtils: append RemoveFolderAsync method --- ZeroLevel/Services/FileSystem/FSUtils.cs | 29 +++++++++++++++++++ .../Services/Serialization/IBinaryReader.cs | 4 +++ .../Services/Serialization/IBinaryWriter.cs | 4 +++ .../Serialization/MemoryStreamReader.cs | 15 ++++++++++ .../Serialization/MemoryStreamWriter.cs | 29 +++++++++++++++++++ 5 files changed, 81 insertions(+) diff --git a/ZeroLevel/Services/FileSystem/FSUtils.cs b/ZeroLevel/Services/FileSystem/FSUtils.cs index ee791ec..810a4c9 100644 --- a/ZeroLevel/Services/FileSystem/FSUtils.cs +++ b/ZeroLevel/Services/FileSystem/FSUtils.cs @@ -3,6 +3,7 @@ using System.IO; using System.IO.Compression; using System.Linq; using System.Threading; +using System.Threading.Tasks; namespace ZeroLevel.Services.FileSystem { @@ -259,6 +260,34 @@ namespace ZeroLevel.Services.FileSystem } while (deleted == false && fault_retrying_count < 5); } + public static async Task RemoveFolderAsync(string path, int fault_retrying_count = 5, int fault_timeout_period = 1000) + { + bool deleted = false; + int try_counter = 0; + do + { + try + { + if (Directory.Exists(path) == false) + { + deleted = true; + break; + } + else + { + await Task.Factory.StartNew(p => Directory.Delete((string)p, true), path); + deleted = true; + } + } + catch (Exception ex) + { + Log.SystemError(ex, $"[FSUtils.RemoveFolderAsync] Fault remove folder {path}"); + try_counter++; + await Task.Delay(fault_timeout_period); + } + } while (deleted == false && fault_retrying_count < 5); + } + public static void CleanAndTestFolder(string path) { if (Directory.Exists(path)) diff --git a/ZeroLevel/Services/Serialization/IBinaryReader.cs b/ZeroLevel/Services/Serialization/IBinaryReader.cs index d58ff82..53eddb8 100644 --- a/ZeroLevel/Services/Serialization/IBinaryReader.cs +++ b/ZeroLevel/Services/Serialization/IBinaryReader.cs @@ -38,6 +38,10 @@ namespace ZeroLevel.Services.Serialization DateTime? ReadDateTime(); + TimeOnly? ReadTime(); + + DateOnly? ReadDate(); + decimal ReadDecimal(); TimeSpan ReadTimeSpan(); diff --git a/ZeroLevel/Services/Serialization/IBinaryWriter.cs b/ZeroLevel/Services/Serialization/IBinaryWriter.cs index 212fdc2..d69bd08 100644 --- a/ZeroLevel/Services/Serialization/IBinaryWriter.cs +++ b/ZeroLevel/Services/Serialization/IBinaryWriter.cs @@ -39,6 +39,10 @@ namespace ZeroLevel.Services.Serialization void WriteDateTime(DateTime? datetime); + void WriteTime(TimeOnly? time); + + void WriteDate(DateOnly? date); + void WriteDecimal(Decimal number); void WriteTimeSpan(TimeSpan period); diff --git a/ZeroLevel/Services/Serialization/MemoryStreamReader.cs b/ZeroLevel/Services/Serialization/MemoryStreamReader.cs index 94674be..a70e080 100644 --- a/ZeroLevel/Services/Serialization/MemoryStreamReader.cs +++ b/ZeroLevel/Services/Serialization/MemoryStreamReader.cs @@ -212,7 +212,21 @@ namespace ZeroLevel.Services.Serialization long deserialized = BitConverter.ToInt64(buffer, 0); return DateTime.FromBinary(deserialized); } + public TimeOnly? ReadTime() + { + var is_null = ReadByte(); + if (is_null == 0) return null; + var ts = ReadTimeSpan(); + return TimeOnly.FromTimeSpan(ts); + } + public DateOnly? ReadDate() + { + var is_null = ReadByte(); + if (is_null == 0) return null; + var days = ReadInt32(); + return DateOnly.FromDayNumber(days); + } public IPAddress ReadIP() { var exists = ReadByte(); @@ -1119,6 +1133,7 @@ namespace ZeroLevel.Services.Serialization _stream.Dispose(); } + public Stream Stream => _stream; } } \ No newline at end of file diff --git a/ZeroLevel/Services/Serialization/MemoryStreamWriter.cs b/ZeroLevel/Services/Serialization/MemoryStreamWriter.cs index 18abaea..c5a8060 100644 --- a/ZeroLevel/Services/Serialization/MemoryStreamWriter.cs +++ b/ZeroLevel/Services/Serialization/MemoryStreamWriter.cs @@ -185,6 +185,34 @@ namespace ZeroLevel.Services.Serialization } } + public void WriteTime(TimeOnly? time) + { + if (time == null) + { + WriteByte(0); + } + else + { + WriteByte(1); + var ts = time.Value.ToTimeSpan(); + WriteTimeSpan(ts); + } + } + + public void WriteDate(DateOnly? date) + { + if (date == null) + { + WriteByte(0); + } + else + { + WriteByte(1); + var days = date.Value.DayNumber; + WriteInt32(days); + } + } + public void WriteIP(IPAddress ip) { if (ip == null) @@ -802,6 +830,7 @@ namespace ZeroLevel.Services.Serialization } } } + #endregion Extension } } \ No newline at end of file