diff --git a/.gitignore b/.gitignore index c2111fc..9095c75 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .env -.vscode \ No newline at end of file +.vscode +__debug* \ No newline at end of file diff --git a/boot/boot.go b/boot/boot.go index b4a9eab..69333bf 100644 --- a/boot/boot.go +++ b/boot/boot.go @@ -1,12 +1,15 @@ package boot import ( + "encoding/json" + "g365sfu/bytebuffer" "g365sfu/logger" "g365sfu/sfu" "g365sfu/socket" "net/http" "os" + "github.com/gorilla/websocket" "github.com/joho/godotenv" "github.com/pion/webrtc/v4" ) @@ -28,8 +31,26 @@ func Bootstrap() { http.ListenAndServe(":"+port, nil) } -func OnLocalICECandidate(roomID, peerID string, candidate webrtc.ICECandidateInit) { - logger.LogInfoMessage("new local ICE candidate for peer " + peerID + " in room " + roomID) +func OnLocalICECandidate(roomID string, peerID string, candidate webrtc.ICECandidateInit) { + room, exists := sfu.GetRoom(roomID) + if !exists { + logger.LogWarnMessage("tried to send local ICE candidate to non existing room " + roomID) + return + } + jsonCandidate, _ := json.Marshal(candidate) + buffer := bytebuffer.Allocate( + 1 + 4 + len([]byte(roomID)) + 4 + len([]byte(peerID)) + 4 + len(jsonCandidate), + ) + buffer.Put(0x04) + buffer.PutUint32(uint32(len([]byte(roomID)))) + buffer.PutBytes([]byte(roomID)) + buffer.PutUint32(uint32(len([]byte(peerID)))) + buffer.PutBytes([]byte(peerID)) + candidateBytes := []byte(candidate.Candidate) + buffer.PutUint32(uint32(len(candidateBytes))) + buffer.PutBytes(candidateBytes) + buffer.Flip() + room.Server.Socket.WriteMessage(websocket.BinaryMessage, buffer.Bytes()) } func OnServerOffer(roomID string, peerID string, offer webrtc.SessionDescription) {