50 lines
1.6 KiB
C#
50 lines
1.6 KiB
C#
using System;
|
|
using System.Net;
|
|
|
|
namespace LightReflectiveMirror
|
|
{
|
|
partial class Program
|
|
{
|
|
void RunNATPunchLoop()
|
|
{
|
|
WriteLogMessage("OK\n", ConsoleColor.Green);
|
|
IPEndPoint remoteEndpoint = new(IPAddress.Any, conf.NATPunchtroughPort);
|
|
|
|
// Stock Data server sends to everyone:
|
|
var serverResponse = new byte[1] { 1 };
|
|
|
|
byte[] readData;
|
|
bool isConnectionEstablished;
|
|
int pos;
|
|
string connectionID;
|
|
|
|
while (true)
|
|
{
|
|
readData = _punchServer.Receive(ref remoteEndpoint);
|
|
pos = 0;
|
|
try
|
|
{
|
|
isConnectionEstablished = readData.ReadBool(ref pos);
|
|
|
|
if (isConnectionEstablished)
|
|
{
|
|
connectionID = readData.ReadString(ref pos);
|
|
|
|
if (_pendingNATPunches.TryGetBySecond(connectionID, out pos))
|
|
{
|
|
NATConnections.Add(pos, new IPEndPoint(remoteEndpoint.Address, remoteEndpoint.Port));
|
|
_pendingNATPunches.Remove(pos);
|
|
Console.WriteLine("Client Successfully Established Puncher Connection. " + remoteEndpoint.ToString());
|
|
}
|
|
}
|
|
|
|
_punchServer.Send(serverResponse, 1, remoteEndpoint);
|
|
}
|
|
catch
|
|
{
|
|
// ignore, packet got fucked up or something.
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|