]> code.octet-stream.net Git - broadcaster/blobdiff - server/status.go
User management
[broadcaster] / server / status.go
index accbcc9933de41124cebe7a0beed83b503b2cbad..b2edd4913acd32e2a0bbc5a4f4d0d91505463fa3 100644 (file)
@@ -1,12 +1,14 @@
 package main
 
 import (
 package main
 
 import (
-       "code.octet-stream.net/broadcaster/protocol"
+       "code.octet-stream.net/broadcaster/internal/protocol"
+       "sync"
 )
 
 type ServerStatus struct {
 )
 
 type ServerStatus struct {
-       statuses   map[int]protocol.StatusMessage
-       changeWait chan bool
+       statuses      map[int]protocol.StatusMessage
+       statusesMutex sync.Mutex
+       changeWait    chan bool
 }
 
 var status ServerStatus
 }
 
 var status ServerStatus
@@ -19,11 +21,15 @@ func InitServerStatus() {
 }
 
 func (s *ServerStatus) MergeStatus(radioId int, status protocol.StatusMessage) {
 }
 
 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.statuses[radioId] = status
        s.TriggerChange()
 }
 
 func (s *ServerStatus) RadioDisconnected(radioId int) {
+       s.statusesMutex.Lock()
+       defer s.statusesMutex.Unlock()
        delete(s.statuses, radioId)
        s.TriggerChange()
 }
        delete(s.statuses, radioId)
        s.TriggerChange()
 }
@@ -34,7 +40,13 @@ func (s *ServerStatus) TriggerChange() {
 }
 
 func (s *ServerStatus) Statuses() map[int]protocol.StatusMessage {
 }
 
 func (s *ServerStatus) Statuses() map[int]protocol.StatusMessage {
-       return s.statuses
+       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 {
 }
 
 func (s *ServerStatus) ChangeChannel() chan bool {