Network Library Documentation
Loading...
Searching...
No Matches
ServerLogic Class Reference

Main server logic class, responsible for all server-managing actions. More...

Static Public Member Functions

static void StartServer (int CCU, int port, DefaultNetworkSettings defaultSettings, ServerSettings serverSettings)
 Initializes and starts the server, including TCP/UDP listeners and packet handlers.
static void StopServer ()
 Stops the server and closes all TCP and UDP connections.
static void PacketAction (int packetId, Packet packet, int fromClient)
 Method responsible for managing received Packet.ClientPackets actions that are written in ServerReceiveHandler class. Can be easily extended for new packet types.
static void SendUDPData (IPEndPoint clientEndPoint, Packet sendPacket)
 Sends a UDP packet to the specified client endpoint.
static DefaultNetworkSettings GetSettings ()
static ServerSettings GetServerSettings ()
static void ConsoleLog (string message)
 Logs a message to the console with a newline.

Static Public Attributes

static Dictionary< int, ServerSideClientclientsList = new Dictionary<int, ServerSideClient>()
 A dictionary holding all connected clients, indexed by their client ID.
static int maxCCU
 Maximum number of concurrent users allowed on the server.
static int listeningPort
 Port number the server listens on for incoming connections.
static X509Certificate2 serverCertificate
 TLS certificate used for secure communication, if enabled.

Static Private Member Functions

static void InitializeClientsList ()
 Initializes the client list.
static void TcpConnectCallback (IAsyncResult result)
 Callback for handling new TCP client connections asynchronously. Assigns the client to the first available slot.
static void UdpReceiveCallback (IAsyncResult result)
 Callback for processing incoming UDP data packets from clients.

Static Private Attributes

static TcpListener tcpListener
 TCP listener for handling incoming TCP connections.
static UdpClient udpListener
 UDP listener for handling incoming UDP packets.
static DefaultNetworkSettings DefaultSettings
 Default network configuration settings for the server.
static ServerSettings ServerSettings
 Advanced server-side settings used during initialization.

Detailed Description

Main server logic class, responsible for all server-managing actions.

Definition at line 12 of file ServerLogic.cs.

Member Function Documentation

◆ ConsoleLog()

void ServerLogic.ConsoleLog ( string message)
static

Logs a message to the console with a newline.

Definition at line 250 of file ServerLogic.cs.

251 {
252 Console.WriteLine(message + "\n");
253 }

◆ GetServerSettings()

ServerSettings ServerLogic.GetServerSettings ( )
static

Definition at line 243 of file ServerLogic.cs.

244 {
245 return ServerSettings;
246 }
static ServerSettings ServerSettings
Advanced server-side settings used during initialization.

◆ GetSettings()

DefaultNetworkSettings ServerLogic.GetSettings ( )
static

Definition at line 238 of file ServerLogic.cs.

239 {
240 return DefaultSettings;
241 }
static DefaultNetworkSettings DefaultSettings
Default network configuration settings for the server.

◆ InitializeClientsList()

void ServerLogic.InitializeClientsList ( )
staticprivate

Initializes the client list.

Definition at line 104 of file ServerLogic.cs.

105 {
106 for (int i = 1; i <= maxCCU; i++)
107 {
108 clientsList.Add(i, new ServerSideClient(i));
109 }
110 }
static Dictionary< int, ServerSideClient > clientsList
A dictionary holding all connected clients, indexed by their client ID.
static int maxCCU
Maximum number of concurrent users allowed on the server.

◆ PacketAction()

void ServerLogic.PacketAction ( int packetId,
Packet packet,
int fromClient )
static

Method responsible for managing received Packet.ClientPackets actions that are written in ServerReceiveHandler class. Can be easily extended for new packet types.

Definition at line 114 of file ServerLogic.cs.

115 {
116 if (!Enum.IsDefined(typeof(Packet.ClientPackets), packetId))
117 {
118 Debug.LogWarning($"Unknown packet ID: {packetId}");
119 return;
120 }
121
122 Packet.ClientPackets packetType = (Packet.ClientPackets)packetId;
123
124 switch (packetType)
125 {
126 case Packet.ClientPackets.welcomeReceived:
127 ServerReceiveHandler.WelcomeReceived(fromClient, packet);
128 break;
129
130 case Packet.ClientPackets.MeassureRequest:
131 ServerReceiveHandler.LatencyRequestReceived(fromClient, packet);
132 break;
133
134 case Packet.ClientPackets.DisconnectRequest:
135 ServerReceiveHandler.DisconnectRequestReceived(fromClient, packet);
136 break;
137
138 case Packet.ClientPackets.MessageToUserRequest:
139 ServerReceiveHandler.MessageToUserRequestReceived(fromClient, packet);
140 break;
141
142 case Packet.ClientPackets.MessageToAllRequest:
143 ServerReceiveHandler.MessageToAllRequestReceived(fromClient, packet);
144 break;
145
146 case Packet.ClientPackets.TransformChange:
147 ServerReceiveHandler.TransformChangeReceived(fromClient, packet);
148 break;
149
150 case Packet.ClientPackets.AnimationChange:
151 ServerReceiveHandler.AnimationChangeReceived(fromClient, packet);
152 break;
153
154 case Packet.ClientPackets.BandwidthRequest:
155 ServerReceiveHandler.BandwidthRequestReceived(fromClient, packet);
156 break;
157
158 case Packet.ClientPackets.ThroughputRequest:
159 ServerReceiveHandler.ThroughputRequestReceived(fromClient, packet);
160 break;
161
162 default:
163 Debug.LogWarning($"Unhandled client packet type: {packetType}");
164 break;
165 }
166 }

◆ SendUDPData()

void ServerLogic.SendUDPData ( IPEndPoint clientEndPoint,
Packet sendPacket )
static

Sends a UDP packet to the specified client endpoint.

Definition at line 223 of file ServerLogic.cs.

224 {
225 try
226 {
227 if (clientEndPoint != null)
228 {
229 udpListener.BeginSend(sendPacket.ConvertToArray(), sendPacket.DataLength(), clientEndPoint, null, null);
230 }
231 }
232 catch (Exception ex)
233 {
234 ConsoleLog($"Error sending via UDP {ex}");
235 }
236 }
byte[] ConvertToArray()
Definition Packet.cs:287
int DataLength()
Definition Packet.cs:300
static void ConsoleLog(string message)
Logs a message to the console with a newline.
static UdpClient udpListener
UDP listener for handling incoming UDP packets.

◆ StartServer()

void ServerLogic.StartServer ( int CCU,
int port,
DefaultNetworkSettings defaultSettings,
ServerSettings serverSettings )
static

Initializes and starts the server, including TCP/UDP listeners and packet handlers.

Ability to use tunelling alternative to webserver (for example playit.gg service)

Definition at line 50 of file ServerLogic.cs.

51 {
52 DefaultSettings = defaultSettings;
53 ServerSettings = serverSettings;
54
55 if (DefaultSettings.useTLS == true)
56 {
57 try
58 {
59 serverCertificate = new X509Certificate2(DefaultSettings.certificatePath, DefaultSettings.certificatePassword);
60 Debug.Log($"Certificate loaded successfully");
61 Console.WriteLine($"Certificate loaded successfully");
62 }
63 catch (Exception ex)
64 {
65 Debug.LogError($"Problem with certificate: {ex.Message}");
66 Console.WriteLine($"Problem with certificate: {ex.Message}");
67 }
68 }
69
70 ConsoleLog("Starting Server");
71 listeningPort = port;
75 if (defaultSettings.useTunneling == true)
76 {
77 listeningPort = defaultSettings.TunnelPort;
78 }
79 maxCCU = CCU;
81 tcpListener = new TcpListener(IPAddress.Any, listeningPort);
82 tcpListener.Start();
83 tcpListener.BeginAcceptTcpClient(new AsyncCallback(TcpConnectCallback), null);
84
85 udpListener = new UdpClient(listeningPort);
86 udpListener.BeginReceive(UdpReceiveCallback, null);
87
88 ConsoleLog($"Server started on Port {listeningPort}");
89 }
static int listeningPort
Port number the server listens on for incoming connections.
static TcpListener tcpListener
TCP listener for handling incoming TCP connections.
static void TcpConnectCallback(IAsyncResult result)
Callback for handling new TCP client connections asynchronously. Assigns the client to the first avai...
static void InitializeClientsList()
Initializes the client list.
static X509Certificate2 serverCertificate
TLS certificate used for secure communication, if enabled.
static void UdpReceiveCallback(IAsyncResult result)
Callback for processing incoming UDP data packets from clients.

◆ StopServer()

void ServerLogic.StopServer ( )
static

Stops the server and closes all TCP and UDP connections.

Definition at line 94 of file ServerLogic.cs.

95 {
96 tcpListener.Stop();
97 udpListener.Close();
98 ConsoleLog("TCP and UDP sockets closed, server is down");
99 }

◆ TcpConnectCallback()

void ServerLogic.TcpConnectCallback ( IAsyncResult result)
staticprivate

Callback for handling new TCP client connections asynchronously. Assigns the client to the first available slot.

Definition at line 171 of file ServerLogic.cs.

172 {
173 TcpClient Client = tcpListener.EndAcceptTcpClient(result);
174 tcpListener.BeginAcceptTcpClient(new AsyncCallback(TcpConnectCallback), null);
175 ConsoleLog($"Client on {Client.Client.RemoteEndPoint} is connecting");
176 for (int i = 1; i <= maxCCU; i++)
177 {
178 if (clientsList[i].tcp.Socket == null)
179 {
180 clientsList[i].tcp.Connect(Client);
181 ConsoleLog($"Client {clientsList[i].tcp.Socket.Client.RemoteEndPoint} has connected");
182 return;
183 }
184 }
185 ConsoleLog("Max server CCU exceeded!");
186 }

◆ UdpReceiveCallback()

void ServerLogic.UdpReceiveCallback ( IAsyncResult result)
staticprivate

Callback for processing incoming UDP data packets from clients.

Definition at line 191 of file ServerLogic.cs.

192 {
193 try
194 {
195 IPEndPoint clientEndPoint = new IPEndPoint(IPAddress.Any, 0);
196 byte[] data = udpListener.EndReceive(result, ref clientEndPoint);
197 udpListener.BeginReceive(UdpReceiveCallback, null);
198 if (data.Length < 4)
199 {
200 return;
201 }
202 Packet packet = new Packet(data);
203 int clientId = packet.ReadInt();
204 if (clientId == 0) return;
205 if (clientsList[clientId].udp.EndPoint == null)
206 {
207 clientsList[clientId].udp.ConnectUDP(clientEndPoint);
208 return;
209 }
210 if (clientsList[clientId].udp.EndPoint.ToString() == clientEndPoint.ToString())
211 {
212 clientsList[clientId].udp.UdpDataHandler(packet);
213 }
214 }
215 catch (Exception ex)
216 {
217 ConsoleLog($"Error receiving UDP {ex}");
218 }
219 }
int ReadInt(bool changeReadPosition=true)
Read int data.
Definition Packet.cs:80

Member Data Documentation

◆ clientsList

Dictionary<int, ServerSideClient> ServerLogic.clientsList = new Dictionary<int, ServerSideClient>()
static

A dictionary holding all connected clients, indexed by their client ID.

Definition at line 17 of file ServerLogic.cs.

◆ DefaultSettings

DefaultNetworkSettings ServerLogic.DefaultSettings
staticprivate

Default network configuration settings for the server.

Definition at line 41 of file ServerLogic.cs.

◆ listeningPort

int ServerLogic.listeningPort
static

Port number the server listens on for incoming connections.

Definition at line 25 of file ServerLogic.cs.

◆ maxCCU

int ServerLogic.maxCCU
static

Maximum number of concurrent users allowed on the server.

Definition at line 21 of file ServerLogic.cs.

◆ serverCertificate

X509Certificate2 ServerLogic.serverCertificate
static

TLS certificate used for secure communication, if enabled.

Definition at line 37 of file ServerLogic.cs.

◆ ServerSettings

ServerSettings ServerLogic.ServerSettings
staticprivate

Advanced server-side settings used during initialization.

Definition at line 45 of file ServerLogic.cs.

◆ tcpListener

TcpListener ServerLogic.tcpListener
staticprivate

TCP listener for handling incoming TCP connections.

Definition at line 29 of file ServerLogic.cs.

◆ udpListener

UdpClient ServerLogic.udpListener
staticprivate

UDP listener for handling incoming UDP packets.

Definition at line 33 of file ServerLogic.cs.