/**
* Send the request using passed Promise.
*
* @param PromiseInterface $promise
* @return PromiseInterface
* @resolves mixed
* @rejects Error|Exception|string|null
* @cancels Error|Exception|string|null
*/
protected function send(PromiseInterface $promise)
{
$pid = $this->protocol->getPid();
$origin = $this->protocol->getOrigin();
$message = $this->message;
$channel = $this->channel;
if ($message instanceof Error || $message instanceof Exception) {
$answer = $channel->createProtocol($message->getMessage())->setPid($pid, true)->setException(get_class($message), true);
} else {
$answer = $channel->createProtocol($message)->setPid($pid, true);
}
$this->channel->send($origin, $answer, Channel::MODE_BUFFER_ONLINE);
return $promise->resolve();
}