owl Svelte Themes

Owl

A high performance server-client & intercommunication protocol implementation in Rust & Python for gameshows!

owl

a high priority FalcoLabs project


=3.12-blue?logo=python&logoColor=white title="Made with Python" loading="lazy" /> =22-blue?logo=node.js&logoColor=white title="Made with Node.js" loading="lazy" />

Open source development for a high performance Rust communication engine, primarily for game show use.

Usage

Configure the software using an Excel file. Both the DDX format (to be finalized later), and the Olympus Online format may be used.

Sound must be configured beforehand (see assets/public/sounds/README.md). The list of all required sounds as well as their samples (not bundled because of size and copyright reasons) resides at assets/public/sounds/catalog.json.

Technical overview

The server software will host a web service and a WebSockets server on a hard-coded IP adress and port at localhost:6942/.

The Python bindings is manually typed and wheel built using PyO3. The JavaScript bindings is automatically generated using wasm-

The protocol in which the client and server communicates in is based on serde serialization of Rust structs. Bindings for Python and JavaScript is available (see engine/engine.pyi and the generated node_modules/client/client.d.ts)

Hacking

  • Install Rust using rustup and use cargo to run the server.
  • Install a JavaScript runtime, like Deno, Bun, or Node.
  • Install a Python implementation, preferably PyPy or CPython. Install maturin, a Python library which automatically generates Python bindings.

You may find project files from various subprojects in these directories: | Subproject | Directory | |------------------------|----------------------------| | User Interface | /frontend/src/ | | Server Logic | /server/logic/ | | Server Utilities | /server/penguin/ | | Engine & APIs | /engine/src/ | | Engine Bindings Python | /engine/engine.pyi | | Client Communications | /frontend/client/src/ | | Client Bindings TS | /frontend/client/src/types |

Building

See Hacking (above) for requirements. After that, the project may be built. Note that the Python bindings is automatically built by Actions and can be found here (Michaelsoft Binbows for Windows, Penguin for Linux),

For chick

  • See the chick project.
  • For client, use chick front. The Rust module will be automatically compiled and bundled, and hot-reload enabled Vite starts serving on the address provided in config.json.
  • For server, use chick run. The Rust module will be compiled, the Python binding generated, the wheel built and installed automatically. server/main.py is subsequenly called, with server/ as current directory.

Other build tools

  • For client, use any JavaScript runtime to invoke compileRustDev in package.json, like bun run dev, npm run dev, yarn dev, etc.
  • For server, compile the Python bindings with maturin develop (or if you want a .whl file, use maturin build -o <name>). Change your directory into server/, and run main.py.
Copyright (c) 2023-2024 FalcoLabs.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.

Top categories

Loading Svelte Themes