--- /dev/null
+package main
+
+import (
+ "code.octet-stream.net/broadcaster/internal/protocol"
+ "sync"
+)
+
+type ServerStatus struct {
+ statuses map[int]protocol.StatusMessage
+ statusesMutex sync.Mutex
+ changeWait chan bool
+}
+
+var status ServerStatus
+
+func InitServerStatus() {
+ status = ServerStatus{
+ statuses: make(map[int]protocol.StatusMessage),
+ changeWait: make(chan bool),
+ }
+}
+
+func (s *ServerStatus) MergeStatus(radioId int, status protocol.StatusMessage) {
+ s.statusesMutex.Lock()
+ defer s.statusesMutex.Unlock()
+ s.statuses[radioId] = status
+ s.TriggerChange()
+}
+
+func (s *ServerStatus) RadioDisconnected(radioId int) {
+ s.statusesMutex.Lock()
+ defer s.statusesMutex.Unlock()
+ delete(s.statuses, radioId)
+ s.TriggerChange()
+}
+
+func (s *ServerStatus) TriggerChange() {
+ close(s.changeWait)
+ s.changeWait = make(chan bool)
+}
+
+func (s *ServerStatus) Statuses() map[int]protocol.StatusMessage {
+ s.statusesMutex.Lock()
+ defer s.statusesMutex.Unlock()
+ c := make(map[int]protocol.StatusMessage)
+ for k, v := range s.statuses {
+ c[k] = v
+ }
+ return c
+}
+
+func (s *ServerStatus) ChangeChannel() chan bool {
+ return s.changeWait
+}