| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- package server
- import (
- "sync"
- "github.com/felamaslen/gmus-backend/pkg/logger"
- "github.com/gorilla/mux"
- "github.com/gorilla/websocket"
- )
- type Server struct {
- router *mux.Router
- l *logger.Logger
- }
- type Client struct {
- name string
- conn *websocket.Conn
- closeChan chan bool
- mu sync.Mutex
- }
- type Member struct {
- Name string `json:"name"`
- LastPing int64 `json:"lastPing"`
- }
- // Except for the client list, the application is stateless server-side.
- // The source of truth for the current state of the player is that of the
- // master client.
- //
- // If more than one client thinks that they are master, whichever sends
- // an action across first should cause the other to obey the instruction
- // and treat the first as master.
- //
- // The master client is responsible for keeping the server updated regularly about the current state.
- //
- // Active clients are all those clients which are responsible for playing the song.
- // In contrast to master, there can be more than one active client.
- // The master client is automatically active.
- //
- // This type here is merely used for validation of client state messages.
- // Each client implementation MUST adhere to this spec.
- type MusicPlayer struct {
- SongId *int `json:"songId,omitempty" validate:"omitempty,gte=1"`
- Playing *bool `json:"playing,omitempty" validate:"-"`
- CurrentTime *float32 `json:"currentTime,omitempty" validate:"omitempty,gte=0"`
- SeekTime *float32 `json:"seekTime,omitempty" validate:"omitempty,min=-1"`
- Master string `json:"master,omitempty"`
- ActiveClients *[]string `json:"activeClients,omitempty"`
- Queue *[]int `json:"queue,omitempty"`
- ShuffleMode *bool `json:"shuffleMode,omitempty" validate:"-"`
- }
|