Skip to content

Support app for the board game Descent v1 that keeps watch over a physical game in progress.

License

Notifications You must be signed in to change notification settings

philsuess/descentinel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

335 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

descentinel

Support app for the board game Descent v1 that keeps watch over a physical game in progress.

  1. The app consists of various backend services:
  2. All backend services are connected to rabbitmq pub/sub channels
  3. The entire app runs on a small device (Raspberry Pi)

Interplay of backend services

Here is a visual display of the queues going out an into various services.

graph TD;
    classDef service fill:#EFC403
    classDef queue fill:#032EEF,color:#eee
    services[[services_look_like_this]]:::service
    queues([queues_look_like_this]):::queue
Loading
graph TD;
    classDef service fill:#EFC403
    classDef queue fill:#032EEF,color:#eee

    Q_GAME_ROOM_FEED([Q_GAME_ROOM_FEED]):::queue
    Q_DETECTED_OL_CARDS([Q_DETECTED_OL_CARDS]):::queue
    Q_SHORT_LOG([Q_SHORT_LOG]):::queue

    monitor[[monitor]]:::service
    monitor-->Q_GAME_ROOM_FEED;
    monitor-->Q_SHORT_LOG;

    detect_card[[detect_card]]:::service
    Q_GAME_ROOM_FEED-->detect_card;
    detect_card-->Q_DETECTED_OL_CARDS;
    detect_card-->Q_SHORT_LOG;

    broadcast[[broadcast]]:::service
    Q_GAME_ROOM_FEED-->broadcast;
    Q_SHORT_LOG-->broadcast;
    Q_DETECTED_OL_CARDS-->broadcast;

    presentation((presentation/frontend))
    style presentation fill:#EF03A5,color:#eee
    Q_GAME_ROOM_FEED-->presentation;
    Q_DETECTED_OL_CARDS-->presentation;
    Q_SHORT_LOG-->presentation;
Loading

monitor: stream the game pieces as images

What?

  • A continuous video feed from a small camera is chunked into still images for downstream services to digest.

Why?

  • This is the eye of the app. It's the one source of information for any component of descentinel.

How?

  • Capture video signal and chop it into still images in pre-defined time intervals using rust.

detect_card: recognize various cards

What?

  • An image of a card with a QR code is given to this service. If the QR code is detected correctly, the card is identified by the content of the QR.

Why?

  • Other services may use the context information to display more infos about the card. Examples may be translations from other languages or information from http://www.descentinthedark.com.
  • Ultimately we have a (ro)bot playing with us and using and referencing the physical components.

How?

  • rust

broadcast: provide GET for frontends

What?

  • Any content produced by a backend service and pushed to some rabbitmq queue is published over a GET.

Why?

  • Frontend technology should be decoupled from messaging in the backend, hence a dedicated web server.

How?

  • rust
  • warp
  • server-sent events (SSE)

presentation: frontend for the browser

What?

  • server-side rendering of updates interesting for user

Why?

  • Game information should be viewable on any device.

How?

  • leptos CSR

Descent: Journeys in the Dark is Copyright © Fantasy Flight Games. All rights reserved.

About

Support app for the board game Descent v1 that keeps watch over a physical game in progress.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •