function internalPush($topic, $id, $result)
{
if (Future\isFuture($result)) {
$self = $this;
return $result->complete(function ($value) use($self, $topic, $id) {
return $self->internalPush($topic, $id, $value);
});
}
$topics = $this->getTopics($topic);
if (!isset($topics[$id])) {
return Future\value(false);
}
if (isset($topics[$id]->request)) {
$topics[$id]->request->resolve($result);
unset($topics[$id]->request);
$this->setTimer($topics, $topic, $id);
return Future\value(true);
} else {
$detector = new Future();
$message = new stdClass();
$message->detector = $detector;
$message->result = $result;
$topics[$id]->messages->push($message);
$this->setTimer($topics, $topic, $id);
return $detector;
}
}