feat(telemost): Implement multiplexer reset and send function updates on reconnect

This commit is contained in:
zarazaex59
2026-04-07 01:32:37 +03:00
parent 416c244be6
commit c77530c3db
3 changed files with 31 additions and 0 deletions

View File

@@ -66,6 +66,14 @@ func Run(roomURL, keyHex string, socksPort int) error {
peer.SetReconnectCallback(func(dc *webrtc.DataChannel) {
log.Println("Updating DataChannel after reconnect")
c.mux.Reset()
c.mux.UpdateSendFunc(func(frame []byte) error {
encrypted, err := c.cipher.Encrypt(frame)
if err != nil {
return err
}
return dc.Send(encrypted)
})
})
log.Println("Connecting to Telemost...")

View File

@@ -151,3 +151,18 @@ func (m *Multiplexer) GetStreams() []uint16 {
}
return sids
}
func (m *Multiplexer) Reset() {
m.mu.Lock()
defer m.mu.Unlock()
m.streams = make(map[uint16]*Stream)
m.nextID = 1
}
func (m *Multiplexer) UpdateSendFunc(onSend func([]byte) error) {
m.mu.Lock()
defer m.mu.Unlock()
m.onSend = onSend
}

View File

@@ -73,6 +73,14 @@ func Run(roomURL, keyHex string) error {
peer.SetReconnectCallback(func(dc *webrtc.DataChannel) {
log.Println("Updating DataChannel after reconnect")
s.mux.Reset()
s.mux.UpdateSendFunc(func(frame []byte) error {
encrypted, err := s.cipher.Encrypt(frame)
if err != nil {
return err
}
return dc.Send(encrypted)
})
})
log.Println("Connecting to Telemost...")