From 80e26f33fb247b45cccb6bf171a417893e57c8ef Mon Sep 17 00:00:00 2001 From: anonpenguin23 Date: Tue, 24 Feb 2026 10:16:27 +0200 Subject: [PATCH] feat: add sourceUserID to publishedTrack and update TrackAddedData and TrackRemovedData structures --- pkg/sfu/room.go | 13 +++++++++++++ pkg/sfu/signaling.go | 8 +++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/pkg/sfu/room.go b/pkg/sfu/room.go index 3e11f5c..2a9a5a1 100644 --- a/pkg/sfu/room.go +++ b/pkg/sfu/room.go @@ -33,6 +33,7 @@ var ( // publishedTrack holds a local track being forwarded from a remote source. type publishedTrack struct { sourcePeerID string + sourceUserID string localTrack *webrtc.TrackLocalStaticRTP remoteTrackSSRC uint32 kind string @@ -294,6 +295,7 @@ func (r *Room) RemovePeer(peerID string) { for _, trackID := range removed { r.broadcastMessage(peerID, NewServerMessage(MessageTypeTrackRemoved, &TrackRemovedData{ PeerID: peerID, + UserID: peer.UserID, TrackID: trackID, })) } @@ -348,10 +350,19 @@ func (r *Room) BroadcastTrack(sourcePeerID string, track *webrtc.TrackRemote) { return } + // Look up source peer's UserID + r.peersMu.RLock() + var sourceUserID string + if sourcePeer, ok := r.peers[sourcePeerID]; ok { + sourceUserID = sourcePeer.UserID + } + r.peersMu.RUnlock() + // Store for future joiners r.publishedTracksMu.Lock() r.publishedTracks[localTrack.ID()] = &publishedTrack{ sourcePeerID: sourcePeerID, + sourceUserID: sourceUserID, localTrack: localTrack, remoteTrackSSRC: uint32(track.SSRC()), kind: track.Kind().String(), @@ -385,6 +396,7 @@ func (r *Room) BroadcastTrack(sourcePeerID string, track *webrtc.TrackRemote) { } peer.SendMessage(NewServerMessage(MessageTypeTrackAdded, &TrackAddedData{ PeerID: sourcePeerID, + UserID: sourceUserID, TrackID: localTrack.ID(), StreamID: localTrack.StreamID(), Kind: track.Kind().String(), @@ -417,6 +429,7 @@ func (r *Room) SendExistingTracksTo(peer *Peer) { } peer.SendMessage(NewServerMessage(MessageTypeTrackAdded, &TrackAddedData{ PeerID: pt.sourcePeerID, + UserID: pt.sourceUserID, TrackID: pt.localTrack.ID(), StreamID: pt.localTrack.StreamID(), Kind: pt.kind, diff --git a/pkg/sfu/signaling.go b/pkg/sfu/signaling.go index a43c852..e97ae17 100644 --- a/pkg/sfu/signaling.go +++ b/pkg/sfu/signaling.go @@ -101,6 +101,7 @@ type ParticipantLeftData struct { // TrackAddedData is sent when a new track is available type TrackAddedData struct { PeerID string `json:"peerId"` + UserID string `json:"userId"` TrackID string `json:"trackId"` StreamID string `json:"streamId"` Kind string `json:"kind"` // "audio" or "video" @@ -108,9 +109,10 @@ type TrackAddedData struct { // TrackRemovedData is sent when a track is removed type TrackRemovedData struct { - PeerID string `json:"peerId"` - TrackID string `json:"trackId"` - Kind string `json:"kind"` + PeerID string `json:"peerId"` + UserID string `json:"userId"` + TrackID string `json:"trackId"` + Kind string `json:"kind"` } // TURNCredentialsData provides TURN server credentials