From bea758813db9f560ec6df6a600fc838566fb1bb4 Mon Sep 17 00:00:00 2001 From: EonaCat Date: Sun, 16 Feb 2025 05:54:29 +0100 Subject: [PATCH] Updated --- EonaCat.Logger/EonaCat.Logger.csproj | 4 +- EonaCat.Logger/Servers/Syslog/Syslog.cs | 14 ++++- EonaCat.Logger/Servers/Tcp/Tcp.cs | 44 +++++++++++--- EonaCat.Logger/Servers/Udp/Udp.cs | 76 +++++++++++++++++-------- 4 files changed, 100 insertions(+), 38 deletions(-) diff --git a/EonaCat.Logger/EonaCat.Logger.csproj b/EonaCat.Logger/EonaCat.Logger.csproj index fbb483c..011b2e0 100644 --- a/EonaCat.Logger/EonaCat.Logger.csproj +++ b/EonaCat.Logger/EonaCat.Logger.csproj @@ -3,7 +3,7 @@ .netstandard2.1; net6.0; net7.0; net8.0; net4.8; icon.ico latest - 1.3.6 + 1.3.7 EonaCat (Jeroen Saey) true EonaCat (Jeroen Saey) @@ -24,7 +24,7 @@ - 1.3.6+{chash:10}.{c:ymd} + 1.3.7+{chash:10}.{c:ymd} true true v[0-9]* diff --git a/EonaCat.Logger/Servers/Syslog/Syslog.cs b/EonaCat.Logger/Servers/Syslog/Syslog.cs index c54a9ca..f9f3a7d 100644 --- a/EonaCat.Logger/Servers/Syslog/Syslog.cs +++ b/EonaCat.Logger/Servers/Syslog/Syslog.cs @@ -12,6 +12,7 @@ public class Syslog : IDisposable { private string _Hostname = "127.0.0.1"; private int _Port = 514; + private bool IsConnected { get; set; } internal UdpClient Udp; @@ -56,14 +57,23 @@ public class Syslog : IDisposable private void SetUdp() { - DisposeUdp(); - Udp = new UdpClient(_Hostname, _Port); + try + { + DisposeUdp(); + Udp = new UdpClient(_Hostname, _Port); + IsConnected = true; + } + catch + { + IsConnected = false; + } } private void DisposeUdp() { if (Udp != null) { + IsConnected = false; Udp.Dispose(); Udp = null; } diff --git a/EonaCat.Logger/Servers/Tcp/Tcp.cs b/EonaCat.Logger/Servers/Tcp/Tcp.cs index 07f30e4..7c4845c 100644 --- a/EonaCat.Logger/Servers/Tcp/Tcp.cs +++ b/EonaCat.Logger/Servers/Tcp/Tcp.cs @@ -12,6 +12,7 @@ namespace EonaCat.Logger.Servers.Tcp private int _Port = 514; internal TcpClient _tcp; + private bool IsConnected { get; set; } public string Nickname { get; set; } public string IpPort => _Hostname + ":" + _Port; @@ -52,14 +53,23 @@ namespace EonaCat.Logger.Servers.Tcp internal void SetTcp() { - DisposeTcp(); - _tcp = new TcpClient(_Hostname, _Port); + try + { + DisposeTcp(); + _tcp = new TcpClient(_Hostname, _Port); + IsConnected = true; + } + catch + { + IsConnected = false; + } } internal void DisposeTcp() { if (_tcp != null) { + IsConnected = false; _tcp.Close(); _tcp.Dispose(); _tcp = null; @@ -84,9 +94,17 @@ namespace EonaCat.Logger.Servers.Tcp return; } - using var stream = _tcp.GetStream(); - await stream.WriteAsync(data, 0, data.Length); - await stream.FlushAsync(); + if (!IsConnected) + { + SetTcp(); + } + + if (IsConnected) + { + using var stream = _tcp.GetStream(); + await stream.WriteAsync(data, 0, data.Length); + await stream.FlushAsync(); + } } internal async Task WriteAsync(string data) @@ -101,10 +119,18 @@ namespace EonaCat.Logger.Servers.Tcp return; } - var sendData = Encoding.UTF8.GetBytes(data); - using var stream = _tcp.GetStream(); - await stream.WriteAsync(sendData, 0, sendData.Length); - await stream.FlushAsync(); + if (!IsConnected) + { + SetTcp(); + } + + if (IsConnected) + { + var sendData = Encoding.UTF8.GetBytes(data); + using var stream = _tcp.GetStream(); + await stream.WriteAsync(sendData, 0, sendData.Length); + await stream.FlushAsync(); + } } ~Tcp() diff --git a/EonaCat.Logger/Servers/Udp/Udp.cs b/EonaCat.Logger/Servers/Udp/Udp.cs index c99dc12..6234e98 100644 --- a/EonaCat.Logger/Servers/Udp/Udp.cs +++ b/EonaCat.Logger/Servers/Udp/Udp.cs @@ -13,6 +13,7 @@ namespace EonaCat.Logger.Servers.Udp private int _Port = 514; internal UdpClient _udp; + private bool IsConnected { get; set; } public string Nickname { get; set; } public string IpPort => _Hostname + ":" + _Port; @@ -53,14 +54,23 @@ namespace EonaCat.Logger.Servers.Udp internal void SetUdp() { - DisposeUdp(); - _udp = new UdpClient(_Hostname, _Port); + try + { + DisposeUdp(); + _udp = new UdpClient(_Hostname, _Port); + IsConnected = true; + } + catch + { + IsConnected = false; + } } internal void DisposeUdp() { if (_udp != null) { + IsConnected = false; _udp.Dispose(); _udp = null; } @@ -79,19 +89,27 @@ namespace EonaCat.Logger.Servers.Udp return; } - _udp.DontFragment = dontFragment; - - int maxChunkSize = MaxUdpPacketSize; - int offset = 0; - - while (offset < data.Length) + if (!IsConnected) { - int chunkSize = Math.Min(maxChunkSize, data.Length - offset); - byte[] chunk = new byte[chunkSize]; - Array.Copy(data, offset, chunk, 0, chunkSize); + SetUdp(); + } - await _udp.SendAsync(chunk, chunk.Length); - offset += chunkSize; + if (IsConnected) + { + _udp.DontFragment = dontFragment; + + int maxChunkSize = MaxUdpPacketSize; + int offset = 0; + + while (offset < data.Length) + { + int chunkSize = Math.Min(maxChunkSize, data.Length - offset); + byte[] chunk = new byte[chunkSize]; + Array.Copy(data, offset, chunk, 0, chunkSize); + + await _udp.SendAsync(chunk, chunk.Length); + offset += chunkSize; + } } } @@ -102,20 +120,28 @@ namespace EonaCat.Logger.Servers.Udp return; } - var sendData = Encoding.UTF8.GetBytes(data); - _udp.DontFragment = dontFragment; - - int maxChunkSize = MaxUdpPacketSize; - int offset = 0; - - while (offset < sendData.Length) + if (!IsConnected) { - int chunkSize = Math.Min(maxChunkSize, sendData.Length - offset); - byte[] chunk = new byte[chunkSize]; - Array.Copy(sendData, offset, chunk, 0, chunkSize); + SetUdp(); + } - await _udp.SendAsync(chunk, chunk.Length); - offset += chunkSize; + if (IsConnected) + { + var sendData = Encoding.UTF8.GetBytes(data); + _udp.DontFragment = dontFragment; + + int maxChunkSize = MaxUdpPacketSize; + int offset = 0; + + while (offset < sendData.Length) + { + int chunkSize = Math.Min(maxChunkSize, sendData.Length - offset); + byte[] chunk = new byte[chunkSize]; + Array.Copy(sendData, offset, chunk, 0, chunkSize); + + await _udp.SendAsync(chunk, chunk.Length); + offset += chunkSize; + } } }