72 lines
2.5 KiB
C#
72 lines
2.5 KiB
C#
using DTLib;
|
|
using DTLib.Network;
|
|
using System;
|
|
using System.Net;
|
|
using System.Net.Sockets;
|
|
using System.Threading;
|
|
using System.Linq;
|
|
|
|
namespace launcher_client
|
|
{
|
|
class InternalServer
|
|
{
|
|
Socket internalServerSocket;
|
|
Thread internalServerThread;
|
|
public InternalServer()
|
|
{
|
|
internalServerSocket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
|
internalServerThread = new(() => Start());
|
|
internalServerThread.Start();
|
|
}
|
|
|
|
void Start()
|
|
{
|
|
internalServerSocket.Bind(new IPEndPoint(IPAddress.Loopback, 38888));
|
|
internalServerSocket.Listen(1000);
|
|
if (Launcher.debug) Launcher.Log("g", "internal server started\n");
|
|
var handlerSocket = internalServerSocket.Accept();
|
|
if (Launcher.debug) Launcher.Log("b", "new connection\n");
|
|
while (true)
|
|
{
|
|
try
|
|
{
|
|
while (true)
|
|
{
|
|
if (handlerSocket.Available >= 2)
|
|
{
|
|
var request = handlerSocket.GetPackage().ToString();
|
|
switch (request)
|
|
{
|
|
case "client connecting":
|
|
Launcher.Log("c", $"request from client: <{request}>\n");
|
|
break;
|
|
default:
|
|
throw new Exception("unknown request: " + request);
|
|
}
|
|
}
|
|
else Thread.Sleep(10);
|
|
}
|
|
}
|
|
catch (ThreadAbortException)
|
|
{
|
|
handlerSocket.Shutdown(SocketShutdown.Both);
|
|
handlerSocket.Close();
|
|
return;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Launcher.Log("y", $"InternalServer.Start() error:\n{ex.Message}\n{ex.StackTrace}\n");
|
|
}
|
|
}
|
|
}
|
|
|
|
public void Stop()
|
|
{
|
|
if (internalServerSocket.Connected) internalServerSocket.Shutdown(SocketShutdown.Both);
|
|
internalServerSocket.Close();
|
|
internalServerThread.Abort();
|
|
if (Launcher.debug) Launcher.Log("g", "internal server stopped\n");
|
|
}
|
|
}
|
|
}
|