This commit is contained in:
2025-02-16 05:54:29 +01:00
parent 3054db7c9b
commit bea758813d
4 changed files with 100 additions and 38 deletions

View File

@@ -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;
}

View File

@@ -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()

View File

@@ -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;
}
}
}