All checks were successful
Create and publish a Docker image 🚀 / build-and-push-image (push) Successful in 2m25s
44 lines
619 B
Go
44 lines
619 B
Go
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)
|
|
}
|
|
}
|
|
}
|