panel v0.9.2 — public release
Self-hostable game server control panel: Go controller + agent, 26 game modules, embedded web UI. One-line install via install.sh / install.ps1. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
using System;
|
||||
using System.Net.Sockets;
|
||||
using System.Threading;
|
||||
using Eleon.Modding;
|
||||
|
||||
|
||||
namespace EPMConnector
|
||||
{
|
||||
public class Client
|
||||
{
|
||||
ModThreadHelper.Info connectToServerThread;
|
||||
|
||||
public event Action OnConnected;
|
||||
public event Action<String> ClientMessages;
|
||||
public event Action<ModProtocol.Package> GameEventReceived;
|
||||
|
||||
volatile ModProtocol client;
|
||||
|
||||
int clientId;
|
||||
|
||||
string gameServerIp;
|
||||
int gameServerPort;
|
||||
|
||||
public Client(int clientId)
|
||||
{
|
||||
this.clientId = clientId;
|
||||
}
|
||||
|
||||
public void Connect(string ipAddress, int port)
|
||||
{
|
||||
this.gameServerIp = ipAddress;
|
||||
this.gameServerPort = port;
|
||||
connectToServerThread = ModThreadHelper.StartThread(ThreadConnectToServer, System.Threading.ThreadPriority.Lowest);
|
||||
}
|
||||
|
||||
private void ThreadConnectToServer(ModThreadHelper.Info ti)
|
||||
{
|
||||
ClientMessages(string.Format("ModInterface: Started connection thread. Connecting to {0}:{1}", this.gameServerIp, this.gameServerPort));
|
||||
while (!ti.eventRunning.WaitOne(0))
|
||||
{
|
||||
if (client == null)
|
||||
{
|
||||
try
|
||||
{
|
||||
TcpClient tcpClient = new TcpClient(this.gameServerIp, this.gameServerPort);
|
||||
tcpClient.ReceiveBufferSize = 10 * 1024 * 1024;
|
||||
tcpClient.SendBufferSize = 10 * 1024 * 1024;
|
||||
|
||||
client = new ModProtocol(tcpClient, PackageReceivedDelegate, DisconnectedDelegate);
|
||||
ClientMessages("ModInterface: Connected with " + client + " over port " + this.gameServerPort);
|
||||
|
||||
OnConnected?.Invoke();
|
||||
}
|
||||
catch (SocketException)
|
||||
{
|
||||
// Ignore
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
ClientMessages(e.GetType() + ": " + e.Message);
|
||||
client = null;
|
||||
}
|
||||
}
|
||||
Thread.Sleep(1000);
|
||||
}
|
||||
}
|
||||
|
||||
// Called in a thread!
|
||||
private void PackageReceivedDelegate(ModProtocol con, ModProtocol.Package p)
|
||||
{
|
||||
GameEventReceived(p);
|
||||
}
|
||||
|
||||
// Called in a thread!
|
||||
private void DisconnectedDelegate(ModProtocol prot)
|
||||
{
|
||||
ClientMessages("DisconnectedDelegate called");
|
||||
Disconnect();
|
||||
}
|
||||
|
||||
public void Send(CmdId cmdId, ushort seqNr, object data)
|
||||
{
|
||||
//ClientMessages("Sending request event: c=" + cmdId + " sNr=" + seqNr + " d=" + data + " client="+client);
|
||||
// Send events of the network
|
||||
ModProtocol c = client;
|
||||
if (c != null)
|
||||
{
|
||||
ModProtocol.Package p = new ModProtocol.Package(cmdId, clientId, seqNr, data);
|
||||
c.AddToSendQueue(p);
|
||||
}
|
||||
}
|
||||
|
||||
public void Disconnect()
|
||||
{
|
||||
if(client != null)
|
||||
{
|
||||
client.Close();
|
||||
client = null;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user