352a262866
The browser might overrule it anyway, if it's really obvious that it should be cached. This is mainly so Cloudflare, etc. don't serve sensitive documents to guests.
67 lines
1.0 KiB
Go
67 lines
1.0 KiB
Go
package common
|
|
|
|
import (
|
|
"sync/atomic"
|
|
)
|
|
|
|
var TopicListThaw ThawInt
|
|
|
|
type ThawInt interface {
|
|
Thawed() bool
|
|
Thaw()
|
|
|
|
Tick() error
|
|
}
|
|
|
|
type SingleServerThaw struct {
|
|
DefaultThaw
|
|
}
|
|
|
|
func NewSingleServerThaw() *SingleServerThaw {
|
|
thaw := &SingleServerThaw{}
|
|
if Config.ServerCount == 1 {
|
|
AddScheduledSecondTask(thaw.Tick)
|
|
}
|
|
return thaw
|
|
}
|
|
|
|
func (thaw *SingleServerThaw) Thawed() bool {
|
|
if Config.ServerCount == 1 {
|
|
return thaw.DefaultThaw.Thawed()
|
|
}
|
|
return true
|
|
}
|
|
|
|
func (thaw *SingleServerThaw) Thaw() {
|
|
if Config.ServerCount == 1 {
|
|
thaw.DefaultThaw.Thaw()
|
|
}
|
|
}
|
|
|
|
type DefaultThaw struct {
|
|
thawed int64
|
|
}
|
|
|
|
func NewDefaultThaw() *DefaultThaw {
|
|
thaw := &DefaultThaw{}
|
|
AddScheduledSecondTask(thaw.Tick)
|
|
return thaw
|
|
}
|
|
|
|
// Decrement the thawed counter once a second until it goes cold
|
|
func (thaw *DefaultThaw) Tick() error {
|
|
prior := thaw.thawed
|
|
if prior > 0 {
|
|
atomic.StoreInt64(&thaw.thawed, prior-1)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (thaw *DefaultThaw) Thawed() bool {
|
|
return thaw.thawed > 0
|
|
}
|
|
|
|
func (thaw *DefaultThaw) Thaw() {
|
|
atomic.StoreInt64(&thaw.thawed, 5)
|
|
}
|