mirror of
https://github.com/openlibrecommunity/olcrtc.git
synced 2026-05-26 07:08:11 +00:00
fix: srv dont leave bug
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user