From 572bcb32c67bf6841291c1d8aff3ede94b944067 Mon Sep 17 00:00:00 2001 From: Ano-sys Date: Sat, 21 Feb 2026 02:00:08 +0100 Subject: [PATCH] Push after nearly loosing all because rider ment to corrupt the .cs --- DirectoryScanReceiver.sln | 16 +++ .../DirectoryScanReceiver.csproj | 10 ++ DirectoryScanReceiver/Program.cs | 104 ++++++++++++++++++ 3 files changed, 130 insertions(+) create mode 100644 DirectoryScanReceiver.sln create mode 100644 DirectoryScanReceiver/DirectoryScanReceiver.csproj create mode 100644 DirectoryScanReceiver/Program.cs diff --git a/DirectoryScanReceiver.sln b/DirectoryScanReceiver.sln new file mode 100644 index 0000000..f221e63 --- /dev/null +++ b/DirectoryScanReceiver.sln @@ -0,0 +1,16 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DirectoryScanReceiver", "DirectoryScanReceiver\DirectoryScanReceiver.csproj", "{9A8FD5F2-1846-4663-8573-9946C240D2EE}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9A8FD5F2-1846-4663-8573-9946C240D2EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9A8FD5F2-1846-4663-8573-9946C240D2EE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9A8FD5F2-1846-4663-8573-9946C240D2EE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9A8FD5F2-1846-4663-8573-9946C240D2EE}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/DirectoryScanReceiver/DirectoryScanReceiver.csproj b/DirectoryScanReceiver/DirectoryScanReceiver.csproj new file mode 100644 index 0000000..6c1dc92 --- /dev/null +++ b/DirectoryScanReceiver/DirectoryScanReceiver.csproj @@ -0,0 +1,10 @@ + + + + Exe + net10.0 + enable + enable + + + diff --git a/DirectoryScanReceiver/Program.cs b/DirectoryScanReceiver/Program.cs new file mode 100644 index 0000000..142b9ef --- /dev/null +++ b/DirectoryScanReceiver/Program.cs @@ -0,0 +1,104 @@ +using System.Net; +using System.Net.Sockets; + +namespace DirectoryScanReceiver; + +static class DataExtractor +{ + public static string? ExtractHeader(byte[] data) + { + int idx = Array.IndexOf(data, (byte)'\n'); + return Encoding.UTF8.GetString(data[..idx]); + } + + public static byte[] ExtractContent(byte[] data) + { + return data[Array.IndexOf(data, (byte)'\n')..]; + } +} + +static class DataHandler +{ + const string OutputDir = "./output"; + + public static void Parse(byte[] data) + { + if (data.Length == 0) return; + + var header = DataExtractor.ExtractHeader(data); + var content = DataExtractor.ExtractContent(data); + + if (header is null || content is null) return; + + var fi = new FileInfo(header); + var dir = Path.GetDirectoryName(header) ?? OutputDir; + var di = new DirectoryInfo(dir); + + if (!di.Exists) di.Create(); + if (fi.Exists) return; + + Console.WriteLine($"Writing File: {header}"); + fi.Create().WriteAsync(new ReadOnlyMemory(content)); + } +} + +class Server +{ + private TcpListener _listener; + private NetworkStream _stream; + + public Server(int port) + { + _listener = new TcpListener(IPAddress.Parse("127.0.0.1"), port); + _listener.Start(); + } + + public void Receiver() + { + // var bytes = new byte[134217728]; // 128 MB + + while (true) + { + if(!_listener.Pending()) continue; + + var peer = _listener.AcceptTcpClient(); + var stream = peer.GetStream(); + + Console.WriteLine($"Connected to Peer: {peer.Client.RemoteEndPoint}"); + while (peer.Connected) + { + var availableBytes = peer.Available; + if(availableBytes <= 0) continue; + + var bytes = new byte[availableBytes]; + try + { + var recvCount = stream.Read(bytes); + if(recvCount <= 0) continue; + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } + + Console.WriteLine("Received:\n" + BitConverter.ToString(bytes)); + DataHandler.Parse(bytes); + } + Console.WriteLine("Disconnected from Peer!"); + } + } +} + +public class Program +{ + public static void Main() + { + while (true) + { + var server = new Server(7156); + Console.WriteLine("Started Server!"); + Console.WriteLine("Waiting for data!"); + server.Receiver(); + } + } +} \ No newline at end of file