panel public release

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-15 01:26:41 -07:00
commit 295eb22826
2165 changed files with 301492 additions and 0 deletions
@@ -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;
}
}
}
}