mirror of
https://github.com/status-im/status-go.git
synced 2025-01-09 14:16:21 +00:00
40359f9c1b
* Adding wakunode module * Adding wakuv2 fleet files * Add waku fleets to update-fleet-config script * Adding config items for waku v2 * Conditionally start waku v2 node depending on config * Adapting common code to use go-waku * Setting log level to info * update dependencies * update fleet config to use WakuNodes instead of BootNodes * send and receive messages * use hash returned when publishing a message * add waku store protocol * trigger signal after receiving store messages * exclude linting rule SA1019 to check deprecated packages
61 lines
837 B
Go
61 lines
837 B
Go
package timecache
|
|
|
|
import (
|
|
"container/list"
|
|
"time"
|
|
)
|
|
|
|
type TimeCache struct {
|
|
Q *list.List
|
|
M map[string]time.Time
|
|
|
|
span time.Duration
|
|
}
|
|
|
|
func NewTimeCache(span time.Duration) *TimeCache {
|
|
return &TimeCache{
|
|
Q: list.New(),
|
|
M: make(map[string]time.Time),
|
|
span: span,
|
|
}
|
|
}
|
|
|
|
func (tc *TimeCache) Add(s string) {
|
|
_, ok := tc.M[s]
|
|
if ok {
|
|
panic("putting the same entry twice not supported")
|
|
}
|
|
|
|
tc.sweep()
|
|
|
|
tc.M[s] = time.Now()
|
|
tc.Q.PushFront(s)
|
|
}
|
|
|
|
func (tc *TimeCache) sweep() {
|
|
for {
|
|
back := tc.Q.Back()
|
|
if back == nil {
|
|
return
|
|
}
|
|
|
|
v := back.Value.(string)
|
|
t, ok := tc.M[v]
|
|
if !ok {
|
|
panic("inconsistent cache state")
|
|
}
|
|
|
|
if time.Since(t) > tc.span {
|
|
tc.Q.Remove(back)
|
|
delete(tc.M, v)
|
|
} else {
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
func (tc *TimeCache) Has(s string) bool {
|
|
_, ok := tc.M[s]
|
|
return ok
|
|
}
|