go-gb28181/pkg/services/device/keepalive.go
2025-01-25 16:58:57 +08:00

39 lines
963 B
Go

package device
import (
"git.skcks.cn/Shikong/go-gb28181/pkg/log"
"github.com/emiago/sipgo"
"time"
)
var keepaliveTimer *time.Ticker
type SendKeepAlive = func(client *sipgo.Client)
var senders = make(map[string]SendKeepAlive)
func AddKeepaliveSender(deviceId string, sender SendKeepAlive) {
log.Log().Info().Msgf("添加 keealive 发送器, deviceId: %s", deviceId)
senders[deviceId] = sender
}
// StartKeepAlive 启动 keepalive 定时器
// 每 30 秒发送一次 keepalive 消息到服务器
func StartKeepAlive(client *sipgo.Client) {
keepaliveTimer = time.NewTicker(time.Second * 30)
go func() {
for range keepaliveTimer.C {
// 遍历所有注册的设备,发送 keepalive 消息
for deviceId, sender := range senders {
log.Log().Debug().Msgf("执行 发送 keealive 消息, deviceId: %s", deviceId)
go sender(client)
}
}
}()
}
// StopKeepAlive 停止 keepalive 定时器
func StopKeepAlive() {
keepaliveTimer.Stop()
}