protected function handlePushRequest($name, $message, $flags = Channel::MODE_DEFAULT, callable $success = null, callable $failure = null, callable $cancel = null, $timeout = 0.0)
{
if ($message->getType() === '') {
$message->setType(Channel::TYPE_REQ);
}
if ($message->getDestination() === '') {
$message->setDestination($name);
}
$status = $this->model->unicast($name, $this->encoder->with($message)->encode(), $flags);
if (!$status) {
if ($cancel !== null) {
$cancel(new LogicException('Request could not be sent.'));
}
return null;
}
$pid = $message->getPid();
$request = $this->createRequest($pid, $success, $failure, $cancel, $timeout);
$this->addRequest($pid, $request);
$this->emit('output', [$name, $message]);
return $request;
}