Files
EonaCat.Transfer/EonaCat.Transfer.Example/Program.cs
2025-11-21 21:04:44 +01:00

81 lines
2.5 KiB
C#

using EonaCat.Transfer;
using EonaCat.Transfer.Models;
NetworkConfig networkConfig = new NetworkConfig()
{
Protocol = ProtocolType.TCP,
Framing = FramingMode.Delimiter,
Delimiter = new byte[] { 0x0A }, // LF
EnableKeepAlive = true,
KeepAliveIntervalMs = 15000,
KeepAliveTimeoutMs = 5000,
AutoReconnect = true,
ReconnectDelayMs = 3000,
};
var server = new TcpServer(networkConfig);
server.ClientConnected += Server_ClientConnected;
server.ClientDisconnected += Server_ClientDisconnected;
server.MessageReceived += Server_MessageReceived;
void Server_MessageReceived(object? sender, (ClientConnection Client, NetworkMessage Message) e)
{
string message = System.Text.Encoding.UTF8.GetString(e.Message.Payload);
Console.WriteLine($"Received from {e.Client.Id}: {message}");
// Echo the message back to the client
var responseMessage = new NetworkMessage();
responseMessage.Payload = System.Text.Encoding.UTF8.GetBytes($"Echo: {message}");
server.SendMessageAsync(e.Client, responseMessage);
}
void Server_ClientDisconnected(object? sender, ClientConnection e)
{
Console.WriteLine($"{e.Id} disconnected {e.RemoteEndPoint.ToString()}");
}
void Server_ClientConnected(object? sender, ClientConnection e)
{
Console.WriteLine($"{e.Id} connected {e.RemoteEndPoint.ToString()}");
}
var client = new TcpClient(networkConfig);
client.Connected += Client_Connected;
client.MessageReceived += Client_MessageReceived;
client.Disconnected += Client_Disconnected;
void Client_Disconnected(object? sender, EventArgs e)
{
Console.WriteLine("Client disconnected from server");
}
void Client_MessageReceived(object? sender, NetworkMessage e)
{
string message = System.Text.Encoding.UTF8.GetString(e.Payload);
Console.WriteLine($"Received from server: {message}");
}
void Client_Connected(object? sender, EventArgs e)
{
Console.WriteLine("Client connected to server");
// Send a test message to the server
var message = new NetworkMessage();
message.Payload = System.Text.Encoding.UTF8.GetBytes("Hello, Server!");
client.SendMessageAsync(message);
}
await server.StartAsync(9000);
await client.ConnectAsync("127.0.0.1", 9000);
// Generate traffic
for (int i = 0; i < 10000; i++)
{
var message = new NetworkMessage();
message.Payload = System.Text.Encoding.UTF8.GetBytes($"Message {i + 1} from client");
await client.SendMessageAsync(message);
await Task.Delay(100);
}
Console.WriteLine("Press ENTER to exit...");
Console.ReadLine();