AeroSports
Realtime .NET runtime that launches game variants, manages controller communication, executes game logic, and coordinates restart flow with the kiosk system.
Variants
30+ game variants
Rooms
8 game rooms
Runtime
.NET console runtime
Communication
Socket + controller network
Latency
5-10ms optimized sensor paths
Grouped by the primary systems, languages, and infrastructure used in this build.
Frameworks
.NET Framework 4.7.2
Libraries
NAudio, log4net, System.Net.Http
Languages
C#
Hardware
Game light sensors, Controllers
Supporting Systems
Kiosk Host, Game Controllers & Sensor Network
AeroSports
Realtime .NET runtime that launches game variants, manages controller communication, executes game logic, and coordinates restart flow with the kiosk system.
Variants
30+ game variants
Rooms
8 game rooms
Runtime
.NET console runtime
Communication
Socket + controller network
Latency
5-10ms optimized sensor paths
Tech Stack Overview
Grouped by the systems, languages, and supporting layers used in this project.
Connects game logic to room-level sensors, targets, and control devices.
The Game Engine is a .NET console application launched by the Kiosk Host with the runtime arguments required to run a session.
These arguments include:
The engine is responsible for:
It acts as the runtime core of each room.
The engine sits between the kiosk host and the physical controller layer, turning controller events into gameplay state and streaming runtime status back to the room system.
The general runtime flow is handled by Program.cs and BaseGame.cs.
Step 1
BaseGame begins the shared gameplay lifecycleStep 2
Before gameplay begins, the communication handler verifies:
If validation succeeds:
Step 3
When the game ends:
Then:
The runtime is divided into three major layers:
This contains the gameplay rules and progression system.
At the core is:
BaseGame -> shared logic for all gamesGame logic is organized by:
This structure allowed shared systems while still supporting unique gameplay behavior for each room.
Communication handlers are responsible for controller/device communication.
Their role is to:
Most handlers were built around:
These worked using RS422 -> Ethernet communication.
Some games also used:
The engine also coordinates room-specific external devices as part of gameplay flow, depending on the variant and room.
At the beginning, the Game Engine was integrated directly into the Kiosk Host because only two rooms existed.
At that stage:
As the facility expanded, it became obvious that both the kiosk and the runtime logic would grow into large independent systems.
So the engine was separated into its own application.
During testing, rooms could break 1020 times per day, often due to multithreading and runtime synchronization issues.
During testing, rooms could break 10-20 times per day, often due to multithreading and runtime synchronization issues.
Over time we: Once the first two rooms became stable and the public response was positive, the facility expanded. That expansion changed the scale...
At the beginning, I was not experienced with: I had to learn by building: The more I built, the more progress I made, and the more interesting the...
At the beginning, I was not experienced with:
I had to learn by building:
The more I built, the more progress I made, and the more interesting the work became.
A major challenge came when working on the Laser game. The setup included: Initially, data was sent using stringbased messages made of "0" and "1"...
To run properly, the engine depends on many concurrent processes such as: At key events like: all of these threads needed to stay synchronized. Ear...
I was one of the main contributors to the runtime foundation of the Game Engine.
My work included:
In the early stage, I spent a lot of time building the base architecture that later made scaling possible.
Once that base became stable:
As the project grew, we expanded the team. At that point, I also:
Core technologies
Supporting technologies