From c7919310b86a272b052f250262da66886e22192e Mon Sep 17 00:00:00 2001 From: set Date: Sat, 14 Mar 2026 19:26:50 +0200 Subject: [PATCH] =?UTF-8?q?ICE=20Candidate=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B2=D0=BE=D0=B4=20=D0=B2=20JSON?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++- boot/boot.go | 25 +++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) 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) {