in src/datachannel/streaming.go [333:362]
func (dataChannel *DataChannel) ResendStreamDataMessageScheduler(log log.T) (err error) {
go func() {
for {
time.Sleep(config.ResendSleepInterval)
dataChannel.OutgoingMessageBuffer.Mutex.Lock()
streamMessageElement := dataChannel.OutgoingMessageBuffer.Messages.Front()
dataChannel.OutgoingMessageBuffer.Mutex.Unlock()
if streamMessageElement == nil {
continue
}
streamMessage := streamMessageElement.Value.(StreamingMessage)
if time.Since(streamMessage.LastSentTime) > dataChannel.RetransmissionTimeout {
log.Debugf("Resend stream data message %d for the %d attempt.", streamMessage.SequenceNumber, *streamMessage.ResendAttempt)
if *streamMessage.ResendAttempt >= config.ResendMaxAttempt {
log.Warnf("Message %d was resent over %d times.", streamMessage.SequenceNumber, config.ResendMaxAttempt)
dataChannel.isStreamMessageResendTimeout <- true
}
*streamMessage.ResendAttempt++
if err = SendMessageCall(log, dataChannel, streamMessage.Content, websocket.BinaryMessage); err != nil {
log.Errorf("Unable to send stream data message: %s", err)
}
streamMessage.LastSentTime = time.Now()
}
}
}()
return
}