Init
This commit is contained in:
111
Server/Program.cs
Normal file
111
Server/Program.cs
Normal file
@@ -0,0 +1,111 @@
|
||||
using System.Diagnostics;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using Domain;
|
||||
using Domain.Dto;
|
||||
using MessagePack;
|
||||
using NetworkTest;
|
||||
using Server;
|
||||
|
||||
if (args.Length < 2)
|
||||
{
|
||||
System.Console.WriteLine("Pass twp arg: test/http/tcp and json/bin");
|
||||
return -1;
|
||||
}
|
||||
|
||||
var dataGenerator = new DataGenerator(generationInterval: TimeSpan.FromMilliseconds(1));
|
||||
|
||||
var protocol = args[0];
|
||||
var serialization = args[1];
|
||||
|
||||
if (protocol == "test")
|
||||
{
|
||||
int nullCount = 0;
|
||||
long index = 0;
|
||||
var sw = Stopwatch.StartNew();
|
||||
var lastMs = 0L;
|
||||
var lastIndex = 0L;
|
||||
var ms = 1000;
|
||||
|
||||
var json = serialization == "json";
|
||||
while (true)
|
||||
{
|
||||
var data = dataGenerator.GetPackage(index);
|
||||
if (data == null)
|
||||
{
|
||||
nullCount++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (json)
|
||||
{
|
||||
JsonData jsonData = new JsonData(data);
|
||||
var responseText = JsonSerializer.Serialize(jsonData);
|
||||
byte[] buffer = Encoding.UTF8.GetBytes(responseText);
|
||||
}
|
||||
else
|
||||
{
|
||||
MessagePackData msgPackData = new MessagePackData(data);
|
||||
byte[] buffer = MessagePackSerializer.Serialize(msgPackData);
|
||||
}
|
||||
|
||||
index++;
|
||||
|
||||
var diff = sw.ElapsedMilliseconds - lastMs;
|
||||
if (diff >= ms)
|
||||
{
|
||||
var serializrd = index - lastIndex;
|
||||
System.Console.WriteLine($"Serialized {serializrd} data packages in {diff} ms.");
|
||||
lastIndex = index;
|
||||
lastMs = sw.ElapsedMilliseconds;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
IServer? server = protocol == "http" ?
|
||||
new HttpServer(index => dataGenerator.GetPackage(index),
|
||||
serialization == "json" ? PrepareResponseJson : PrepareResponseMessagePack) :
|
||||
null;
|
||||
|
||||
server?.Start();
|
||||
System.Console.WriteLine("Server started:");
|
||||
System.Console.WriteLine(server);
|
||||
|
||||
// Обработка выхода по Ctrl+C
|
||||
Console.CancelKeyPress += (sender, e) =>
|
||||
{
|
||||
e.Cancel = true; // Prevent immediate termination
|
||||
Console.WriteLine("Shutdown signal received. Stopping server...");
|
||||
server?.Stop();
|
||||
Console.WriteLine("Goodbye!");
|
||||
Environment.Exit(0);
|
||||
};
|
||||
|
||||
|
||||
// Бесконечный цикл ожидания
|
||||
while (true)
|
||||
{
|
||||
Thread.Sleep(1000);
|
||||
}
|
||||
|
||||
|
||||
void PrepareResponseJson(Data data, HttpListenerResponse response)
|
||||
{
|
||||
JsonData jsonData = new JsonData(data);
|
||||
var responseText = JsonSerializer.Serialize(jsonData);
|
||||
byte[] buffer = Encoding.UTF8.GetBytes(responseText);
|
||||
response.ContentType = "application/json";
|
||||
response.ContentLength64 = buffer.Length;
|
||||
response.OutputStream.Write(buffer, 0, buffer.Length);
|
||||
}
|
||||
|
||||
void PrepareResponseMessagePack(Data data, HttpListenerResponse response)
|
||||
{
|
||||
MessagePackData msgPackData = new MessagePackData(data);
|
||||
byte[] buffer = MessagePackSerializer.Serialize(msgPackData);
|
||||
response.ContentType = "application/x-msgpack";
|
||||
response.ContentLength64 = buffer.Length;
|
||||
response.OutputStream.Write(buffer, 0, buffer.Length);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user