1
0
mirror of https://github.com/stryan/mumble-discord-bridge.git synced 2024-11-22 21:35:44 -05:00

improve discord buffer packet drop message

kill the bridge if unable to send to discord for 5 seconds
This commit is contained in:
Tyler Stiene 2021-11-04 01:21:41 -04:00
parent 649fe9f33e
commit 0f57c5d33a
2 changed files with 22 additions and 3 deletions

View File

@ -183,7 +183,7 @@ func (b *BridgeState) StartBridge() {
// Start Passing Between
// From Mumble
go b.MumbleStream.fromMumbleMixer(ctx, &wg, toDiscord)
go b.MumbleStream.fromMumbleMixer(ctx, &wg, cancel, toDiscord)
// From Discord
b.DiscordStream = &DiscordDuplex{

View File

@ -3,6 +3,7 @@ package bridge
import (
"context"
"log"
"strconv"
"sync"
"time"
@ -50,12 +51,15 @@ func (m MumbleDuplex) OnAudioStream(e *gumble.AudioStreamEvent) {
}()
}
func (m MumbleDuplex) fromMumbleMixer(ctx context.Context, wg *sync.WaitGroup, toDiscord chan []int16) {
func (m MumbleDuplex) fromMumbleMixer(ctx context.Context, wg *sync.WaitGroup, cancel context.CancelFunc, toDiscord chan []int16) {
mumbleSleepTick.Start(10 * time.Millisecond)
sendAudio := false
bufferWarning := false
droppingPackets := false
droppingPacketCount := 0
wg.Add(1)
for {
@ -124,9 +128,24 @@ func (m MumbleDuplex) fromMumbleMixer(ctx context.Context, wg *sync.WaitGroup, t
promToDiscordBufferSize.Set(float64(len(toDiscord)))
select {
case toDiscord <- outBuf:
{
if droppingPackets {
log.Println("Discord buffer ok, total packets dropped " + strconv.Itoa(droppingPacketCount))
droppingPackets = false
}
}
default:
log.Println("Error: toDiscord buffer full. Dropping packet")
if !droppingPackets {
log.Println("Error: toDiscord buffer full. Dropping packets")
droppingPackets = true
droppingPacketCount = 0
}
droppingPacketCount++
promToDiscordDropped.Inc()
if droppingPacketCount > 250 {
log.Println("Discord Timeout")
cancel()
}
}
discrodSendSleepTick.Notify()