Network Library Documentation
Loading...
Searching...
No Matches
ServerSideClient.TCP Class Reference

Class for managing TCP connection. More...

Public Member Functions

 TCP (int id)
 Initializes a new TCP object with the given client ID.
void Connect (TcpClient TcpSocket)
 Connects a TCP client and starts listening for data. Optionally initializes TLS, HMAC, and auth token.
void Send (Packet sendPacket)
 Sends a packet over the TCP stream to the connected client.
void Disconnect ()
 Closes the TCP connection and releases related resources.

Public Attributes

TcpClient Socket
byte[] hmacKey

Private Member Functions

bool HandleData (byte[] Data)
 Handles received raw data and calls PacketAction() to manage packet type.
void ReceiveCallback (IAsyncResult result)
 Callback function for receiving TCP data asynchronously.

Private Attributes

Stream Stream
byte[] receiveBuffer
readonly int Id
Packet receivedPacket

Detailed Description

Class for managing TCP connection.

Definition at line 209 of file ServerSideClient.cs.

Constructor & Destructor Documentation

◆ TCP()

ServerSideClient.TCP.TCP ( int id)

Initializes a new TCP object with the given client ID.

Definition at line 220 of file ServerSideClient.cs.

221 {
222 Id = id;
223 }

Member Function Documentation

◆ Connect()

void ServerSideClient.TCP.Connect ( TcpClient TcpSocket)

Connects a TCP client and starts listening for data. Optionally initializes TLS, HMAC, and auth token.

Definition at line 227 of file ServerSideClient.cs.

228 {
229 Socket = TcpSocket;
230 Socket.ReceiveBufferSize = BufferSize;
231 Socket.SendBufferSize = BufferSize;
232 if (ServerLogic.GetSettings().useTLS == true)
233 {
234 SslStream SslStream = new SslStream(Socket.GetStream(), false);
235 try
236 {
237 SslStream.AuthenticateAsServer(
238 ServerLogic.serverCertificate,
239 false,
240 SslProtocols.Tls12,
241 false
242 );
243 Stream = SslStream;
244 }
245 catch (Exception ex)
246 {
247 ServerLogic.clientsList[Id].DisconnectRequest();
248 return;
249 }
250 } else
251 {
252 Stream = Socket.GetStream();
253 }
254 receiveBuffer = new byte[BufferSize];
255 receivedPacket = new Packet();
256 hmacKey = GenerateHmacKey();
257 ServerLogic.clientsList[Id].hmacKey = hmacKey;
258 ServerLogic.clientsList[Id].SetToken();
259 Stream.BeginRead(receiveBuffer, 0, BufferSize, ReceiveCallback, null);
260 if(ServerLogic.GetServerSettings().sendWelcomeToServerMesage == true)
261 {
262 ServerSendHandler.WelcomePacket(Id, ServerLogic.GetServerSettings().welcomeToServerMessage);
263 } else
264 {
265 ServerSendHandler.WelcomePacket(Id, "");
266 }
267
268 if(ServerLogic.GetSettings().useHMAC == true)
269 {
270 ServerSendHandler.SendHmacKeyPacket(Id, hmacKey);
271 }
272 if(ServerLogic.GetSettings().useAuthentificationTokens == true)
273 {
274 Console.WriteLine($"Sending auth token {ServerLogic.clientsList[Id].auth_token}");
275 ServerSendHandler.SendAuthPacket(Id, ServerLogic.clientsList[Id].GetToken());
276 }
277 }

◆ Disconnect()

void ServerSideClient.TCP.Disconnect ( )

Closes the TCP connection and releases related resources.

Definition at line 342 of file ServerSideClient.cs.

343 {
344 Socket.Close();
345 Stream = null;
346 receivedPacket = null;
347 receiveBuffer = null;
348 Socket = null;
349 }

◆ HandleData()

bool ServerSideClient.TCP.HandleData ( byte[] Data)
private

Handles received raw data and calls PacketAction() to manage packet type.

Definition at line 298 of file ServerSideClient.cs.

299 {
300 if (ServerLogic.clientsList[Id].isDisconnected)
301 {
302 return false;
303 }
304 int packetLength = 0;
305 receivedPacket.AddBytesToBuffers(Data);
306 if (receivedPacket.UnreadLength() >= 4)
307 {
308 packetLength = receivedPacket.ReadInt();
309 if (packetLength <= 0)
310 {
311 return true;
312 }
313 }
314 while (packetLength > 0 && packetLength <= receivedPacket.UnreadLength())
315 {
316 byte[] packetBytes = receivedPacket.ReadBytes(packetLength);
317 ThreadsController.StartOnMainThread(() =>
318 {
319 Packet packet = new Packet(packetBytes);
320 int packetId = packet.ReadInt();
321 ServerLogic.PacketAction(packetId, packet, Id);
322 });
323 packetLength = 0;
324 if (receivedPacket.UnreadLength() >= 4)
325 {
326 packetLength = receivedPacket.ReadInt();
327 if (packetLength <= 0)
328 {
329 return true;
330 }
331 }
332 }
333 if (packetLength <= 1)
334 {
335 return true;
336 }
337 return false;
338 }
int ReadInt(bool changeReadPosition=true)
Read int data.
Definition Packet.cs:80

◆ ReceiveCallback()

void ServerSideClient.TCP.ReceiveCallback ( IAsyncResult result)
private

Callback function for receiving TCP data asynchronously.

Definition at line 353 of file ServerSideClient.cs.

354 {
355 try
356 {
357 if (Stream == null)
358 {
359 return;
360 }
361 int ByteLength = Stream.EndRead(result);
362 if (ByteLength <= 0)
363 {
364 ServerLogic.clientsList[Id].Disconnect();
365 return;
366 }
367 byte[] Data = new byte[ByteLength];
368 Array.Copy(receiveBuffer, Data, ByteLength);
369 receivedPacket.ClearPacket(HandleData(Data));
370 Stream.BeginRead(receiveBuffer, 0, BufferSize, ReceiveCallback, null);
371 }
372 catch (Exception ex)
373 {
374 ConsoleLog($"Error receiving TCP {ex}");
375 ServerLogic.clientsList[Id].Disconnect();
376 }
377 }

◆ Send()

void ServerSideClient.TCP.Send ( Packet sendPacket)

Sends a packet over the TCP stream to the connected client.

Definition at line 281 of file ServerSideClient.cs.

282 {
283 try
284 {
285 if (Socket != null && Stream != null)
286 {
287 Stream.Write(sendPacket.ConvertToArray());
288 }
289 }
290 catch (Exception ex)
291 {
292 ConsoleLog($"Error, cannot send data to client {Id}: {ex}");
293 }
294 }
byte[] ConvertToArray()
Definition Packet.cs:287

Member Data Documentation

◆ hmacKey

byte [] ServerSideClient.TCP.hmacKey

Definition at line 216 of file ServerSideClient.cs.

◆ Id

readonly int ServerSideClient.TCP.Id
private

Definition at line 214 of file ServerSideClient.cs.

◆ receiveBuffer

byte [] ServerSideClient.TCP.receiveBuffer
private

Definition at line 212 of file ServerSideClient.cs.

◆ receivedPacket

Packet ServerSideClient.TCP.receivedPacket
private

Definition at line 215 of file ServerSideClient.cs.

◆ Socket

TcpClient ServerSideClient.TCP.Socket

Definition at line 213 of file ServerSideClient.cs.

◆ Stream

Stream ServerSideClient.TCP.Stream
private

Definition at line 211 of file ServerSideClient.cs.