mirror of
https://github.com/rafi1212122/BLHX.Server.git
synced 2025-12-12 14:34:39 +01:00
50 lines
1.3 KiB
C#
50 lines
1.3 KiB
C#
using BLHX.Server.Common.Utils;
|
|
using System.Net;
|
|
using System.Net.Sockets;
|
|
|
|
namespace BLHX.Server.Game
|
|
{
|
|
public class Connection
|
|
{
|
|
readonly TcpClient tcpClient;
|
|
readonly Logger c;
|
|
readonly CancellationTokenSource cts = new();
|
|
readonly Task loopTask;
|
|
public IPEndPoint EndPoint => (IPEndPoint)tcpClient.Client.RemoteEndPoint!;
|
|
|
|
public Connection(TcpClient tcpClient)
|
|
{
|
|
this.tcpClient = tcpClient;
|
|
c = new(EndPoint.ToString());
|
|
loopTask = Task.Run(ClientLoop, cts.Token);
|
|
}
|
|
|
|
private async Task ClientLoop()
|
|
{
|
|
var ns = tcpClient.GetStream();
|
|
var buf = GC.AllocateUninitializedArray<byte>(8 << 13);
|
|
var pos = 0;
|
|
|
|
while (!cts.Token.IsCancellationRequested)
|
|
{
|
|
await Task.Delay(1);
|
|
int len = ns.Read(buf, pos, buf.Length - pos);
|
|
len += pos;
|
|
if (len == 0)
|
|
continue;
|
|
|
|
c.Debug(BitConverter.ToString(buf[..len]).Replace("-", ""));
|
|
}
|
|
}
|
|
|
|
public void EndProtocol()
|
|
{
|
|
cts.Cancel();
|
|
loopTask.Wait();
|
|
loopTask.Dispose();
|
|
|
|
tcpClient.Dispose();
|
|
}
|
|
}
|
|
}
|