Files
livekit/pkg/utils/iceconfigcache.go
Paul Wells c51b3e3fe2 use ttlcache (#2677)
* use ttlcache

* go

* test
2024-04-23 02:20:54 -07:00

43 lines
870 B
Go

package utils
import (
"time"
"github.com/jellydator/ttlcache/v3"
"github.com/livekit/protocol/livekit"
)
const (
iceConfigTTLMin = 5 * time.Minute
)
type IceConfigCache[T comparable] struct {
c *ttlcache.Cache[T, *livekit.ICEConfig]
}
func NewIceConfigCache[T comparable](ttl time.Duration) *IceConfigCache[T] {
cache := ttlcache.New(
ttlcache.WithTTL[T, *livekit.ICEConfig](max(ttl, iceConfigTTLMin)),
ttlcache.WithDisableTouchOnHit[T, *livekit.ICEConfig](),
)
go cache.Start()
return &IceConfigCache[T]{cache}
}
func (icc *IceConfigCache[T]) Stop() {
icc.c.Stop()
}
func (icc *IceConfigCache[T]) Put(key T, iceConfig *livekit.ICEConfig) {
icc.c.Set(key, iceConfig, ttlcache.DefaultTTL)
}
func (icc *IceConfigCache[T]) Get(key T) *livekit.ICEConfig {
if it := icc.c.Get(key); it != nil {
return it.Value()
}
return &livekit.ICEConfig{}
}