WinForms orchestration layer between the Kiosk UI, Scorecard UI, Game Engine, backend API, and room hardware.
Company
AeroSports
Role
Runtime orchestration + hardware coordination
Stack
.NET WinForms + WebView + sockets + hardware IO
Deployment
Room PC runtime coordinating displays, engine, API, and devices
Status
Production host runtime across active rooms
Door lock integration
The Kiosk Host & Room Control application is one of the core software systems used in the facility.
Built in .NET WinForms, it acts as the orchestration layer between the Kiosk UI, Scorecard UI, Game Engine, backend API, and the physical room hardware.
This software does not directly interact with customers. Customer interactions happen through the Kiosk UI, while the host application manages the runtime behavior behind the scenes.
Its responsibilities can be grouped into four major areas:
Originally, this logic was tightly integrated with the Game Engine as one large application. As both systems grew, they were separated into two dedicated software layers because they served very different purposes.
The host sits in the middle of the room runtime, coordinating display layers, realtime engine traffic, API submission, and direct device control.
The Kiosk Host acts as the central runtime coordinator for the room.
It displays two web applications through WebView:
It communicates with both and also maintains communication with:
Kiosk UI sends selected game settings to the host:
Host launches the Game Engine with the required arguments
Game Engine continuously sends realtime status back to the host through socket communication
Host distributes that data to:
Host also handles the final score submission to the API once a game ends
The Scorecard is a separate web application displayed through WebView.
The host sends it:
Player info comes from the Kiosk UI, while most realtime session/gameplay data comes from the Game Engine.
The host manages room display configurations including:
This made the host responsible for multi-display orchestration and routing the right content to the right monitor.
The host receives game/session instructions from the Kiosk UI and launches the correct Game Engine instance with all required arguments, such as:
After launch, it continuously exchanges runtime data with the engine and redistributes that information to the UI layers.
The host provides direct control over room hardware such as:
For example, the host communicates with the wristband scanner by:
This hardware control layer is one of the reasons the host remained a native WinForms application instead of moving fully into the web layer.
The host is also responsible for coordinating backend-facing runtime operations, including:
It acts as a bridge between the realtime room runtime and the broader backend system.
The Admin Panel was intentionally built in WinForms, not inside the Kiosk UI.
That decision gave us much deeper control over:
To open the admin features, staff perform a hidden screen pattern gesture, then enter a password.
Once authenticated, they can access advanced tools such as:
The host also includes a dedicated hardware status / control screen for staff and developers to monitor room devices and troubleshoot issues directly.
The Kiosk Host evolved significantly over time.
As the facility grew, the host evolved from a simple launch utility into a full room orchestration runtime.
This was one of the most complex room applications because it sat between many systems at once.
One of the earliest challenges was making the system behave like a proper kiosk appliance on Windows.
We solved this using PowerShell scripts for startup behavior and room runtime control.
These scripts were later expanded for several other operational needs too.
Supporting 2 screens was relatively straightforward.
Supporting 3 screens was harder.
The biggest issue came from:
Because the monitors could appear swapped, we tried several detection approaches, but none were fully reliable.
The practical solution was to add a Switch Screen option in the admin panel.
That let staff/devs correct the mapping manually, and once saved, the setup would usually remain stable for some time.
Every admin menu option existed because of a real operational problem.
Examples:
Restart App In kiosk mode, restarting the app otherwise required using the physical power button. This button made recovery much easier.
Close App Closes the app and reopens Explorer, which had otherwise been disabled for kiosk mode.
Update Pulls the latest build from Git while preserving room-specific settings and files, so we did not have to reconfigure each room on every update.
Simulate Scan Useful for developers when NFC cards were unavailable or when scanners were not usable during certain updates. Also useful for staff demos or temporary scan issues.
To improve stability, we also added watchdog behavior using PowerShell.
The watchdog checked:
If problems were detected, it could:
This made the room software more resilient in real operating conditions.
I have been involved in this project from the beginning, alongside the other AeroSports software systems.
My contribution included:
This was a collaborative project, and my teammates helped implement several features across the system.
I reviewed their work as part of the development process, and some of the best reliability ideas - especially the watchdog and several of the kiosk scripts - came from the team and worked out very well in practice.
Core tools and technologies used in this project.
Core technologies
Supporting technologies