commit laplace repo
This commit is contained in:
74
laplace/core/room.go
Normal file
74
laplace/core/room.go
Normal file
@@ -0,0 +1,74 @@
|
||||
package core
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/gorilla/websocket"
|
||||
)
|
||||
|
||||
type Room struct {
|
||||
ID string
|
||||
Sessions map[string]*StreamSession
|
||||
CallerConn *websocket.Conn
|
||||
}
|
||||
|
||||
type StreamSession struct {
|
||||
ID string
|
||||
Offer string
|
||||
Answer string
|
||||
CallerIceCandidates []string
|
||||
CalleeIceCandidates []string
|
||||
CallerConn *websocket.Conn
|
||||
CalleeConn *websocket.Conn
|
||||
}
|
||||
|
||||
var roomMap = make(map[string]*Room)
|
||||
|
||||
func GetRoom(id string) *Room {
|
||||
return roomMap[id]
|
||||
}
|
||||
|
||||
func NewRoom(callerConn *websocket.Conn) *Room {
|
||||
room := Room{
|
||||
ID: newRoomID(),
|
||||
Sessions: make(map[string]*StreamSession),
|
||||
CallerConn: callerConn,
|
||||
}
|
||||
roomMap[room.ID] = &room
|
||||
return &room
|
||||
}
|
||||
|
||||
func newRoomID() string {
|
||||
id := GetRandomName(0)
|
||||
for GetRoom(id) != nil {
|
||||
id = GetRandomName(0)
|
||||
}
|
||||
return id
|
||||
}
|
||||
|
||||
func RemoveRoom(id string) {
|
||||
roomMap[id] = nil
|
||||
}
|
||||
|
||||
func (room *Room) GetSession(id string) *StreamSession {
|
||||
return room.Sessions[id]
|
||||
}
|
||||
|
||||
func (room *Room) NewSession(calleeConn *websocket.Conn) *StreamSession {
|
||||
session := StreamSession{
|
||||
ID: room.newSessionID(),
|
||||
CallerIceCandidates: []string{},
|
||||
CalleeIceCandidates: []string{},
|
||||
CallerConn: room.CallerConn,
|
||||
CalleeConn: calleeConn,
|
||||
}
|
||||
room.Sessions[session.ID] = &session
|
||||
return &session
|
||||
}
|
||||
|
||||
func (room *Room) newSessionID() string {
|
||||
id := fmt.Sprintf("%s$%s", room.ID, GetRandomName(0))
|
||||
for GetRoom(id) != nil {
|
||||
id = fmt.Sprintf("%s$%s", room.ID, GetRandomName(0))
|
||||
}
|
||||
return id
|
||||
}
|
||||
Reference in New Issue
Block a user