← All work

BO'S Amusement · 2020 – 2026

Kiosk fleet server and Gaming Commission reporting

One server that every Multikiosk in every bar reports to over WebSocket, using a protocol I designed. It builds the regulatory reports for the Belgian Gaming Commission, and operators manage bars and machines through its admin panel.

Role
Design and development, end to end
Stack
  • C++
  • WebSockets
  • Raspberry Pi
  • Linux
  • CakePHP
  • MySQL
  • Custom WebSocket protocol between machines and server, in C++
  • Automated reporting to the Belgian Gaming Commission
  • Admin panel for bars, machines and the warehouse

Gaming machines in Belgium are only legal if the regulator can see what they do. Each Multikiosk sits in a bar, often on a 4G connection, and the Belgian Gaming Commission expects regular, accurate reports on every machine. I designed and built the system that makes this happen: one server that the whole fleet reports to, running on a Raspberry Pi.

How it works

 Multikiosk (bar A) ─┐
 Multikiosk (bar B) ─┼── WebSocket · my protocol ──▶  Fleet server (Raspberry Pi)
 Multikiosk (bar C) ─┘                                 ├─ C++ protocol service
                                                       ├─ C++ reporter service ──▶ Gaming Commission
                                                       └─ CakePHP admin panel  ◀── operator

1. The machine-to-server protocol (C++)

On each machine, a C++ service sends the machine’s status and counters: total money in and out, games played and the other meters the regulator tracks. It uses a WebSocket protocol I defined. On the server, a C++ protocol service accepts connections from every machine, validates the messages and stores the data.

A WebSocket gives each machine one persistent, two-way connection. That suits machines on mobile networks: the connection stays open, the machine reconnects when the network drops, and the server always knows which machines are online.

2. The reporter service (C++)

A separate C++ service turns the collected data into the reports the Gaming Commission requires and submits them. There are several report types, each with its own content and schedule. Because reporting runs apart from data collection, a slow or failed submission never blocks the machines, and reports can be retried from the stored data.

3. The admin panel (CakePHP)

Operators manage the fleet through a web panel on the same server:

  • register bars (venues) and machines
  • assign a machine to a bar, move it to another bar, or send it back to the warehouse
  • see each machine’s status and latest counters

Because a machine’s location is part of what the regulator needs to know, moving it in the panel automatically keeps the reports correct.

Why it matters

The whole chain, from the coin counter on a machine to a report at the regulator, runs without anyone touching it. When a machine moves between bars, operators change one setting in a web page and the reporting follows.