Push after nearly loosing all because rider ment to corrupt the .cs
This commit is contained in:
@@ -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
|
||||
@@ -0,0 +1,10 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
@@ -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<byte>(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user