function invokeHandler($name, array &$args, stdClass $context)
{
if ($context->isMissingMethod) {
$args = array($name, $args);
}
$passContext = $context->passContext;
if ($passContext === null) {
$passContext = $this->passContext;
}
if ($context->async) {
$self = $this;
return Future\promise(function ($resolve, $reject) use($self, $passContext, &$args, $context) {
if ($passContext) {
$args[] = $context;
}
$args[] = function ($value) use($resolve, $reject) {
if ($value instanceof Exception || $value instanceof Throwable) {
$reject($value);
} else {
$resolve($value);
}
};
$self->callService($args, $context);
});
} else {
if ($passContext) {
$args[] = $context;
}
return Future\toFuture($this->callService($args, $context));
}
}