Compare commits
No commits in common. "df92d0ec0a07ace6e0e5e417da60050c092577bb" and "0984f1b284bac56a55ffbf6f7838c135f01ab79a" have entirely different histories.
df92d0ec0a
...
0984f1b284
|
@ -1,3 +1,2 @@
|
||||||
.idea
|
.idea
|
||||||
goldgorilla
|
goldgorilla
|
||||||
ice.servers.json
|
|
14
app.go
14
app.go
|
@ -4,7 +4,6 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/pion/webrtc/v3"
|
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
@ -26,28 +25,17 @@ type App struct {
|
||||||
func (a *App) Init(srcListenAddr string, svcAddr string, logjamBaseUrl string, targetRoom string) {
|
func (a *App) Init(srcListenAddr string, svcAddr string, logjamBaseUrl string, targetRoom string) {
|
||||||
println("initializing ..")
|
println("initializing ..")
|
||||||
a.src = srcListenAddr
|
a.src = srcListenAddr
|
||||||
var iceServers []webrtc.ICEServer
|
|
||||||
iceconfjson, err := os.ReadFile("./ice.servers.json")
|
|
||||||
if err != nil {
|
|
||||||
println("[E] error reading ice.servers.json: " + err.Error())
|
|
||||||
} else {
|
|
||||||
err = json.Unmarshal(iceconfjson, &iceServers)
|
|
||||||
if err != nil {
|
|
||||||
panic("[E] can't parse ice.servers.json: " + err.Error())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
a.conf = &models.ConfigModel{
|
a.conf = &models.ConfigModel{
|
||||||
LogjamBaseUrl: logjamBaseUrl + "/auxiliary-node",
|
LogjamBaseUrl: logjamBaseUrl + "/auxiliary-node",
|
||||||
TargetRoom: targetRoom,
|
TargetRoom: targetRoom,
|
||||||
ServiceAddress: svcAddr,
|
ServiceAddress: svcAddr,
|
||||||
ICEServers: iceServers,
|
|
||||||
}
|
}
|
||||||
roomRepo := repositories.NewRoomRepository(a.conf)
|
roomRepo := repositories.NewRoomRepository(a.conf)
|
||||||
a.router = &routers.Router{}
|
a.router = &routers.Router{}
|
||||||
respHelper := controllers.NewResponseHelper()
|
respHelper := controllers.NewResponseHelper()
|
||||||
roomCtrl := controllers.NewRoomController(respHelper, roomRepo, a.conf)
|
roomCtrl := controllers.NewRoomController(respHelper, roomRepo, a.conf)
|
||||||
|
|
||||||
err = a.router.RegisterRoutes(roomCtrl)
|
err := a.router.RegisterRoutes(roomCtrl)
|
||||||
panicIfErr(err)
|
panicIfErr(err)
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
[
|
|
||||||
{
|
|
||||||
"urls": ["turn:turn.example.com:4499"],
|
|
||||||
"username": "user",
|
|
||||||
"credential": "1234"
|
|
||||||
}
|
|
||||||
]
|
|
|
@ -1,10 +1,7 @@
|
||||||
package models
|
package models
|
||||||
|
|
||||||
import "github.com/pion/webrtc/v3"
|
|
||||||
|
|
||||||
type ConfigModel struct {
|
type ConfigModel struct {
|
||||||
ServiceAddress string `json:"serviceAddress"`
|
ServiceAddress string `json:"serviceAddress"`
|
||||||
LogjamBaseUrl string `json:"logjamBaseUrl"`
|
LogjamBaseUrl string `json:"logjamBaseUrl"`
|
||||||
TargetRoom string `json:"targetRoom"`
|
TargetRoom string `json:"targetRoom"`
|
||||||
ICEServers []webrtc.ICEServer `json:"iceServers"`
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,10 +109,10 @@ func (r *RoomRepository) CreatePeer(roomId string, id uint64, canPublish bool, i
|
||||||
|
|
||||||
room := r.Rooms[roomId]
|
room := r.Rooms[roomId]
|
||||||
r.Unlock()
|
r.Unlock()
|
||||||
|
room.Lock()
|
||||||
|
defer room.Unlock()
|
||||||
|
|
||||||
peerConn, err := webrtc.NewPeerConnection(webrtc.Configuration{
|
peerConn, err := webrtc.NewPeerConnection(webrtc.Configuration{})
|
||||||
ICEServers: r.conf.ICEServers,
|
|
||||||
})
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.NewError("can't create peer connection", 500, models.MessageResponse{Message: err.Error()})
|
return models.NewError("can't create peer connection", 500, models.MessageResponse{Message: err.Error()})
|
||||||
}
|
}
|
||||||
|
@ -130,8 +130,6 @@ func (r *RoomRepository) CreatePeer(roomId string, id uint64, canPublish bool, i
|
||||||
println("[PC] negotiating with peer", id)
|
println("[PC] negotiating with peer", id)
|
||||||
r.offerPeer(peerConn,roomId,id)
|
r.offerPeer(peerConn,roomId,id)
|
||||||
})*/
|
})*/
|
||||||
room.Lock()
|
|
||||||
defer room.Unlock()
|
|
||||||
room.Peers[id] = &Peer{
|
room.Peers[id] = &Peer{
|
||||||
ID: id,
|
ID: id,
|
||||||
Conn: peerConn,
|
Conn: peerConn,
|
||||||
|
@ -177,8 +175,8 @@ func (r *RoomRepository) onPeerConnectionStateChange(roomId string, id uint64, n
|
||||||
r.Unlock()
|
r.Unlock()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
room := r.Rooms[roomId]
|
|
||||||
r.Unlock()
|
r.Unlock()
|
||||||
|
room := r.Rooms[roomId]
|
||||||
room.Lock()
|
room.Lock()
|
||||||
defer room.Unlock()
|
defer room.Unlock()
|
||||||
|
|
||||||
|
@ -331,20 +329,20 @@ func (r *RoomRepository) SetPeerAnswer(roomId string, id uint64, answer webrtc.S
|
||||||
r.Unlock()
|
r.Unlock()
|
||||||
return models.NewError("room doesn't exists", 403, map[string]any{"roomId": roomId})
|
return models.NewError("room doesn't exists", 403, map[string]any{"roomId": roomId})
|
||||||
}
|
}
|
||||||
room := r.Rooms[roomId]
|
|
||||||
r.Unlock()
|
r.Unlock()
|
||||||
|
room := r.Rooms[roomId]
|
||||||
room.Lock()
|
room.Lock()
|
||||||
|
defer room.Unlock()
|
||||||
|
|
||||||
if !r.doesPeerExists(roomId, id) {
|
if !r.doesPeerExists(roomId, id) {
|
||||||
room.Unlock()
|
|
||||||
return models.NewError("no such a peer with this id in this room", 403, map[string]any{"roomId": roomId, "peerId": id})
|
return models.NewError("no such a peer with this id in this room", 403, map[string]any{"roomId": roomId, "peerId": id})
|
||||||
}
|
}
|
||||||
peer := room.Peers[id]
|
|
||||||
room.Unlock()
|
err := room.Peers[id].Conn.SetRemoteDescription(answer)
|
||||||
err := peer.Conn.SetRemoteDescription(answer)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.NewError(err.Error(), 500, models.MessageResponse{Message: err.Error()})
|
return models.NewError(err.Error(), 500, models.MessageResponse{Message: err.Error()})
|
||||||
}
|
}
|
||||||
peer.HandshakeLock.Unlock()
|
room.Peers[id].HandshakeLock.Unlock()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
func (r *RoomRepository) SetPeerOffer(roomId string, id uint64, offer webrtc.SessionDescription) (sdpAnswer *webrtc.SessionDescription, err error) {
|
func (r *RoomRepository) SetPeerOffer(roomId string, id uint64, offer webrtc.SessionDescription) (sdpAnswer *webrtc.SessionDescription, err error) {
|
||||||
|
@ -410,17 +408,15 @@ func (r *RoomRepository) ClosePeer(roomId string, id uint64) error {
|
||||||
r.Unlock()
|
r.Unlock()
|
||||||
return models.NewError("room doesn't exists", 403, map[string]any{"roomId": roomId})
|
return models.NewError("room doesn't exists", 403, map[string]any{"roomId": roomId})
|
||||||
}
|
}
|
||||||
room := r.Rooms[roomId]
|
|
||||||
r.Unlock()
|
r.Unlock()
|
||||||
|
room := r.Rooms[roomId]
|
||||||
room.Lock()
|
room.Lock()
|
||||||
peer := room.Peers[id]
|
defer room.Unlock()
|
||||||
|
|
||||||
if !r.doesPeerExists(roomId, id) {
|
if !r.doesPeerExists(roomId, id) {
|
||||||
room.Unlock()
|
|
||||||
return models.NewError("no such a peer with this id in this room", 403, map[string]any{"roomId": roomId, "peerId": id})
|
return models.NewError("no such a peer with this id in this room", 403, map[string]any{"roomId": roomId, "peerId": id})
|
||||||
}
|
}
|
||||||
room.Unlock()
|
return room.Peers[id].Conn.Close()
|
||||||
return peer.Conn.Close()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *RoomRepository) ResetRoom(roomId string) error {
|
func (r *RoomRepository) ResetRoom(roomId string) error {
|
||||||
|
|
Loading…
Reference in New Issue