-
Notifications
You must be signed in to change notification settings - Fork 267
Open
Description
I'm trying to rewrite this example using fiber and fiber socket io, but I can't do it, could you help me with this?
I need a version of this code using fiber and fiber socket io.
https://github.com/pion/example-webrtc-applications/blob/master/sfu-ws/main.go
func (s *WSHandler) ConferenceWebsocketHandler(c *fiber.Ctx) error {
return socketio.New(func(conn *socketio.Websocket) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// Initializing PeerConnection and session
session, err := s.initPeerSession(ctx, conn)
if err != nil {
s.logger.Errorf("init peer session: %v", err)
return
}
defer session.Close()
// Registering a peer in the conference
s.conference_usecase.AddPeer(session.PC, session.Writer)
// Processing of ICE candidates
session.PC.OnICECandidate(func(cand *webrtc.ICECandidate) {
if cand == nil {
return
}
if err := s.sendCandidate(session, cand); err != nil {
s.logger.Errorf("send candidate: %v", err)
}
})
// Processing connection status changes
session.PC.OnConnectionStateChange(func(state webrtc.PeerConnectionState) {
if state == webrtc.PeerConnectionStateClosed {
if err := s.conference_usecase.SignalPeers(); err != nil {
s.logger.Errorf("signal peers after close: %v", err)
}
}
})
// Processing incoming media tracks
session.PC.OnTrack(func(t *webrtc.TrackRemote, _ *webrtc.RTPReceiver) {
s.handleTrack(session, t)
})
// Initial signaling of feasts
if err := s.conference_usecase.SignalPeers(); err != nil {
s.logger.Errorf("initial signal peers: %v", err)
}
// The main cycle of reading WebSocket messages from the client
for {
msg, err := session.ReadMessage()
if err != nil {
s.logger.Infof("read message error or connection closed: %v", err)
return
}
if err := s.handleWebsocketMessage(session, msg); err != nil {
s.logger.Errorf("handle websocket message: %v", err)
}
}
})(c)
}
``
is there a message handler function
```go
func (s *WSHandler) handleWebsocketMessage(session *PeerSession, msg conference_utils.WebsocketMessage) error {
switch msg.Event {
case EventCandidate:
var candidate webrtc.ICECandidateInit
if err := json.Unmarshal([]byte(msg.Data), &candidate); err != nil {
return err
}
return session.PC.AddICECandidate(candidate)
case EventAnswer:
var answer webrtc.SessionDescription
if err := json.Unmarshal([]byte(msg.Data), &answer); err != nil {
return err
}
return session.PC.SetRemoteDescription(answer)
default:
// Ignoring unknown events, you can add logging
return nil
}
}
I can't get rid of this endless loop or change it to socket.On in any way.
Metadata
Metadata
Assignees
Labels
No labels