package main import "sync" type Room struct { mu sync.Mutex peers map[string]*Peer tracks []*Track } func NewRoom() *Room { return &Room{ peers: make(map[string]*Peer), } } func (r *Room) AddPeer(p *Peer) { r.mu.Lock() defer r.mu.Unlock() r.peers[p.ID] = p for _, t := range r.tracks { p.AddTrack(t) } } func (r *Room) RemovePeer(id string) { r.mu.Lock() defer r.mu.Unlock() delete(r.peers, id) } func (r *Room) AddTrack(from *Peer, t *Track) { r.mu.Lock() defer r.mu.Unlock() r.tracks = append(r.tracks, t) for _, p := range r.peers { if p.ID != from.ID { p.AddTrack(t) } } }