About the project
This is a multiplayer poker project made from scratch using Unity Game Engine and their various tools such as Unity Netcode for GameObjects and Unity Game Services features such as Multiplay, Server hosting and matchmaking. This is a work in progress project spanning over 6 months with me acting as the primary developer. As such I have created many of the complex systems used to simulate the poker experience digitally including hand comparison logic, table and seat management, ai bot logic, dynamic game types, etc.
The primary system I would like to showcase here is the client-server architecture. For this project, in order to maximize server efficiency, I have designed our server side code to simulate multiple tables simultaneously while sending the clients only their own table's relevant information and abstracting the rest.


The Client Bridge is a script that stores all the Remote Procedure Calls (RPCs) necessary for the game. All RPCs are handled through this script thus, eliminating the need for client to have any server side scripts. All the game simulation is done exclusively on server side and client just updates its own UI accordingly.
Moreover, the server is responsible for simulating multiple different games at the same time, and each game (table) is visible only to the respective clients. This allows for each server to simulate multiple games at once instead of dedicating one server to one game.
You can see the comparison in client hierarchy and server hierarchy below.

This level of abstraction is achieved using Unity Netcode's NetworkObject Visibility functionality. We instantiate each table as a NetworkObject and make it visible only to the relevant clients through their clientIDs.

Working on this project has been an instrumental stepping stone in improving my Networking and netcode skillset, creating multiplayer system capable of hosting multiple games and thousands of clients has allowed me to learn many useful skill in regards to client-server architecture, Netcode for GameObjects features, Server Hosting using Unity's MultiPlay services, backend integration through implementing REST APIs and much more.

