fix: srv dont leave bug

This commit is contained in:
zarazaex69
2026-05-07 00:42:36 +03:00
parent 63dd61c61d
commit 9ca0e8f57f
2 changed files with 30 additions and 9 deletions

View File

@@ -190,6 +190,7 @@ func (p *Peer) Close() error {
p.cancel()
close(p.done)
if p.room != nil {
p.unpublishLocalTracks()
p.room.Disconnect()
}
close(p.sendQueue)
@@ -198,6 +199,20 @@ func (p *Peer) Close() error {
return nil
}
func (p *Peer) unpublishLocalTracks() {
if p.room == nil || p.room.LocalParticipant == nil {
return
}
for _, publication := range p.room.LocalParticipant.TrackPublications() {
if publication.SID() == "" {
continue
}
if err := p.room.LocalParticipant.UnpublishTrack(publication.SID()); err != nil {
log.Printf("WB Stream unpublish track error: %v", err)
}
}
}
// SetReconnectCallback is a stub for WB Stream.
func (p *Peer) SetReconnectCallback(cb func(*webrtc.DataChannel)) {
p.onReconnect = cb

View File

@@ -109,7 +109,7 @@ func Run(
go func() {
<-runCtx.Done()
s.shutdown()
s.closeSession()
}()
s.serve(runCtx)
@@ -268,6 +268,19 @@ func (s *Server) reinstallSession(dead *smux.Session) {
s.installSession()
}
func (s *Server) closeSession() {
s.sessMu.Lock()
if s.session != nil {
_ = s.session.Close()
s.session = nil
}
if s.conn != nil {
_ = s.conn.Close()
s.conn = nil
}
s.sessMu.Unlock()
}
func (s *Server) onData(data []byte) {
s.sessMu.RLock()
conn := s.conn
@@ -321,14 +334,7 @@ func (s *Server) serve(ctx context.Context) {
}
func (s *Server) shutdown() {
s.sessMu.Lock()
if s.session != nil {
_ = s.session.Close()
}
if s.conn != nil {
_ = s.conn.Close()
}
s.sessMu.Unlock()
s.closeSession()
if s.ln != nil {
_ = s.ln.Close()
}