feat: webrtc leave

pull/269/merge v0.9.0-beta.2
zijiren233 2 months ago
parent 5632b6738b
commit 92db82934c

@ -38,6 +38,14 @@ func NewWebSocketHandler(wss *utils.WebSocket) gin.HandlerFunc {
}
}
func isNormalCloseError(err error) bool {
var we *websocket.CloseError
if !errors.As(err, &we) {
return false
}
return we.Code == websocket.CloseNormalClosure
}
func NewWSMessageHandler(u *op.User, r *op.Room, l *log.Entry) func(c *websocket.Conn) error {
return func(c *websocket.Conn) error {
client, err := r.NewClient(u, c)
@ -67,6 +75,9 @@ func NewWSMessageHandler(u *op.User, r *op.Room, l *log.Entry) func(c *websocket
go func() {
if err := handleReaderMessage(client, l); err != nil {
if isNormalCloseError(err) {
return
}
l.Errorf("ws: handle reader message error: %v", err)
}
}()
@ -117,6 +128,21 @@ func writeMessage(c *op.Client, v op.Message) error {
func handleReaderMessage(c *op.Client, l *log.Entry) error {
defer func() {
if c.RTCJoined() {
c.SetRTCJoined(false)
_ = c.Broadcast(&pb.Message{
Type: pb.MessageType_WEBRTC_LEAVE,
Sender: &pb.Sender{
Username: c.User().Username,
UserId: c.User().ID,
},
Payload: &pb.Message_WebrtcData{
WebrtcData: &pb.WebRTCData{
From: fmt.Sprintf("%s:%s", c.User().ID, c.ConnID()),
},
},
})
}
c.Close()
if r := recover(); r != nil {
l.Errorf("ws: panic: %v", r)
@ -126,6 +152,9 @@ func handleReaderMessage(c *op.Client, l *log.Entry) error {
for {
msg, err := readMessage(c)
if err != nil {
if isNormalCloseError(err) {
return nil
}
l.Errorf("ws: read message error: %v", err)
return err
}

Loading…
Cancel
Save