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()
|
||
|
}
|