Nav apraksta

Fela Maslen af6f9ab40d feat: bundle script 4 gadi atpakaļ
gmus-backend ab61154b2b feat: flutter mobile app 4 gadi atpakaļ
gmus-mobile af6f9ab40d feat: bundle script 4 gadi atpakaļ
gmus-web 69c2536819 feat: basic mobile UI 5 gadi atpakaļ
k8s ce4d5189f9 feat: flutter prod build 4 gadi atpakaļ
.gitignore e2f37eb5c6 feat: barebones http server, websocket API and react app 5 gadi atpakaļ
Jenkinsfile 23e32d695b feat: run mobile unit tests in CI 4 gadi atpakaļ
LICENSE 0aa1a8bbf1 Initial commit 5 gadi atpakaļ
Makefile a4b72f1d53 feat: added mobile test to main Makefile 4 gadi atpakaļ
README.md aeb8dcbc10 feat: updated mobile app docs 4 gadi atpakaļ
logo.xcf 9f66df06de feat: login portal styling 5 gadi atpakaļ

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 keeps the database up-to-date, based on a directory containing music files.

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.