var (
Rooms = map[string]*Room{}
- RoomsM sync.Mutex
+ RoomsM sync.RWMutex
)
type Room struct {
- name string
- key string
- peers map[byte]*Peer
- alive chan struct{}
+ name string
+ key string
+ peers map[byte]*Peer
+ peersM sync.RWMutex
+ alive chan struct{}
}
func (room *Room) Stats(now time.Time) []string {
sids := make([]int, 0, len(room.peers))
+ room.peersM.RLock()
for sid := range room.peers {
sids = append(sids, int(sid))
}
+ room.peersM.RUnlock()
sort.Ints(sids)
lines := make([]string, 0, len(sids))
for _, sid := range sids {