Networking:

We use sockets for networking.
All the data are sent or recieved as byte arrays (packets) via TCP.
Each client is managed asynchronously by a different server task.
We follow the [client request -> server verify -> broadcast] logic.


Packet encryption:
To minimize packet manipulation via exploits the packet information is encrypted.
A simple implementation is already shared on how to encrypt packet data.
Tho it can be improved I will not extend much on this.
An open source security system is not that much of a security measure.


No UDP support:
There are many controversial conversations on the internet about this.
Most commercial MMORPGs go with this option, so it will do fine for this project.


Packet management:
On both server and client there is a packet manager class.
First it reads the packet byte size and secondly it decrypts the data.
After that it reads the packet id and calls the equilavent recievable implementation with that data.
We use two bytes for both packet size value and packet ids. This ensures we can use up to 32767 of packet data and individual ids.


World regions:
The world area is separated in a 2d region grid.
This vastly limits the information broadcasted to nearby players and makes possible the simultaneous coexistence of hundreds if not thousands of players.
The regions are predefined at WorldManager class by calculating the World.ini configurations and a fixed visibility range.