public function ping($timeout = 10)
{
$payload = $this->pingSeq;
$this->conn->send(new Frame($payload, true, Frame::OP_PING));
$seq = $this->pingSeq;
$this->pingSeq++;
if ($timeout > 0) {
$timer = $this->loop->addTimer($timeout, function () use($seq) {
if (isset($this->pingRequests[$seq])) {
$this->pingRequests[$seq]['deferred']->reject('timeout');
unset($this->pingRequests[$seq]);
}
});
$deferred = new Deferred();
$this->pingRequests[$seq] = ['seq' => $seq, 'deferred' => $deferred, 'timer' => $timer];
return $deferred->promise();
}
}