35 lines
633 B
Go
35 lines
633 B
Go
|
package yamux
|
||
|
|
||
|
import "time"
|
||
|
|
||
|
type ping struct {
|
||
|
id uint32
|
||
|
// written to by the session on ping response
|
||
|
pingResponse chan struct{}
|
||
|
|
||
|
// closed by the Ping call that sent the ping when done.
|
||
|
done chan struct{}
|
||
|
// result set before done is closed.
|
||
|
err error
|
||
|
duration time.Duration
|
||
|
}
|
||
|
|
||
|
func newPing(id uint32) *ping {
|
||
|
return &ping{
|
||
|
id: id,
|
||
|
pingResponse: make(chan struct{}, 1),
|
||
|
done: make(chan struct{}),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (p *ping) finish(val time.Duration, err error) {
|
||
|
p.err = err
|
||
|
p.duration = val
|
||
|
close(p.done)
|
||
|
}
|
||
|
|
||
|
func (p *ping) wait() (time.Duration, error) {
|
||
|
<-p.done
|
||
|
return p.duration, p.err
|
||
|
}
|