How smilexgamer/cso-master-server works
Purpose and Build Target
This is a native Windows C++ master-server implementation for Counter-Strike Online Taiwan CB2 clients. The executable is built through Visual Studio from cso-master-server.sln / cso-master-server.vcxproj; startup is rooted in main.cpp.
Startup, Configuration, and Operations
Startup loads server settings, initializes services, and exposes console-oriented operation. Configuration is externalized in bin/configs/serverconfig.json, interpreted by serverconfig.cpp / serverconfig.h; runtime console behavior resides in serverconsole.cpp / serverconsole.h.
Network Edge
The server accepts client traffic over TCP and UDP. TCP connection lifecycle and listener behavior are separated in networking/tcp_connection.cpp and networking/tcp_server.cpp; UDP hosting is implemented in networking/udp_server.cpp. These form the protocol boundary between CSO clients and internal packet/domain logic.
Packet Dispatch and Protocol Features
managers/packetmanager.cpp is the central packet-routing layer. Specialized packet managers implement client protocol domains: authentication and compatibility (managers/packet_loginmanager.cpp, managers/packet_versionmanager.cpp, managers/packet_clientcheckmanager.cpp); encryption (managers/packet_cryptmanager.cpp); and server discovery/transfer (managers/packet_serverlistmanager.cpp, managers/packet_transfermanager.cpp).
Session and Player State
Connected-user lifecycle and mutable player state are managed separately from transport through managers/usermanager.cpp and user/user.cpp. Packet handlers update this in-memory state for character, inventory, option, favorite, shop, and user-start operations, including managers/packet_charactermanager.cpp and managers/packet_itemmanager.cpp.
Rooms and Match Coordination
Lobby/room state is owned by managers/roommanager.cpp, while room and match models live under room/room.cpp, room/gamematch.cpp, and room/gamematchuser.cpp. Room-related packets (managers/packet_roommanager.cpp, managers/packet_hostmanager.cpp, managers/packet_udpmanager.cpp) coordinate membership, host selection, and client UDP/match connection details.
Persistence and Dependencies
managers/databasemanager.cpp is the persistence boundary to a MariaDB/MySQL-compatible database; schema provisioning is supplied by bin/sql/csodatabase.sql. The project vendors MariaDB client headers/library in thirdparty/mysql and bcrypt for password handling in thirdparty/libbcrypt. It also includes OpenSSL libraries/headers (thirdparty/openssl) and JSON support (thirdparty/nlohmann/json.hpp); Boost must be provided locally before build.
Components 17
Runtime
- Server startup · Build target startup and service initialization.
main.cpp - Server configuration
serverconfig.cpp - Server console
serverconsole.cpp
Network Edge
- TCP listener
networking/tcp_server.cpp - TCP connections
networking/tcp_connection.cpp - UDP host
networking/udp_server.cpp
Packet Protocol
- Packet router · Central routing boundary for client packets.
managers/packetmanager.cpp - Login and compatibility
managers/packet_loginmanager.cpp - Packet encryption
managers/packet_cryptmanager.cpp - Discovery and transfer
managers/packet_serverlistmanager.cpp - Room and host packets · Coordinates membership, hosting, and UDP match details.
managers/packet_roommanager.cpp
State and Matches
- User sessions
managers/usermanager.cpp - Player state · Mutable character, inventory, options, and related player data.
user/user.cpp - Lobby and rooms
managers/roommanager.cpp - Match models
room/gamematch.cpp
Persistence
- Database access · MariaDB/MySQL persistence boundary.
managers/databasemanager.cpp - Database schema
bin/sql/csodatabase.sql
Connections 18
- Server startup → Server configuration: loads
- Server startup → Server console: starts
- Server startup → TCP listener: initializes
- Server startup → UDP host: initializes
- TCP listener → TCP connections: accepts
- TCP connections → Packet router: client packets
- UDP host → Packet router: UDP packets
- Packet router → Login and compatibility: routes auth
- Packet router → Packet encryption: routes crypto
- Packet router → Discovery and transfer: routes discovery
- Packet router → Room and host packets: routes room flow
- Login and compatibility → User sessions: authenticates
- User sessions → Player state: owns
- Room and host packets → Lobby and rooms: coordinates
- Lobby and rooms → Match models: owns
- Login and compatibility → Database access: reads credentials
- User sessions → Database access: persists users
- Database access → Database schema: provisioned by