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