30 lines
548 B
Go
30 lines
548 B
Go
package h2mux
|
|
|
|
import (
|
|
"sync/atomic"
|
|
)
|
|
|
|
// PingTimestamp is an atomic interface around ping timestamping and signalling.
|
|
type PingTimestamp struct {
|
|
ts int64
|
|
signal Signal
|
|
}
|
|
|
|
func NewPingTimestamp() *PingTimestamp {
|
|
return &PingTimestamp{signal: NewSignal()}
|
|
}
|
|
|
|
func (pt *PingTimestamp) Set(v int64) {
|
|
if atomic.SwapInt64(&pt.ts, v) != 0 {
|
|
pt.signal.Signal()
|
|
}
|
|
}
|
|
|
|
func (pt *PingTimestamp) Get() int64 {
|
|
return atomic.SwapInt64(&pt.ts, 0)
|
|
}
|
|
|
|
func (pt *PingTimestamp) GetUpdateChan() <-chan struct{} {
|
|
return pt.signal.WaitChannel()
|
|
}
|