Sin descripción

Fela Maslen a52f14309c fix: updated tests with pointers hace 4 años
gmus-backend a52f14309c fix: updated tests with pointers hace 4 años
gmus-mobile 57ee9d7a11 refactor: partial state set actions instead of prioritised actions hace 4 años
gmus-web eb88d24789 feat: dispatch masterSet action instead of stateSet, and remove 5 second timer hace 4 años
k8s 2ee38186c2 feat: separate deployment for file watcher hace 4 años
.gitignore e2f37eb5c6 feat: barebones http server, websocket API and react app hace 5 años
Jenkinsfile f9d8d70418 fix: correct effect dispatch order hace 4 años
LICENSE 0aa1a8bbf1 Initial commit hace 5 años
Makefile ddb1029fd6 feat: app bundle with icon hace 4 años
README.md 2ee38186c2 feat: separate deployment for file watcher hace 4 años
logo.xcf 9f66df06de feat: login portal styling hace 5 años

README.md

go-music-player (gmus)

Backend

This manages the music library database, serves requests and handles client connections.

For more info, see the readme.

Frontend clients

Each frontend implements the APIs provided by the backend. Their job is to play music, or control the master client. The following clients are implemented:

Architecture

Database

This is PostgreSQL. It is responsible for storing the music files and their metadata.

PubSub

This is implemented in Go using Redis. It is responsible for coordinating state between clients. Note that the only state which is stored on the backend is the list of clients currently connected.

API

This is an HTTP API written in Go. It is responsible for implementing the PubSub, as well as serving data to the clients. The API may be running in multiple redundant containers.

Scanner

This is a cronjob which periodically scans the library directory, keeping the database up to date.

Watcher

This watches the library directory in real time, updating the database when it changes.

Clients

Each client connects to the API. One client is "master", while all others are "slave". Master is responsible for playing the music, and keeping other clients up-to-date through the socket.

There is no authentication - all clients are trusted equally. Clients may take over master status whenever they want. Master must obey this instruction. Clients are responsible for providing unique names when connecting.