Hprose\Client::invoke PHP Метод

invoke() публичный Метод

public invoke ( $name, array &$args = [], $callback = null, hprose\InvokeSettings $settings = null )
$args array
$settings hprose\InvokeSettings
    public function invoke($name, array &$args = array(), $callback = null, InvokeSettings $settings = null)
    {
        if ($callback instanceof InvokeSettings) {
            $settings = $callback;
            $callback = null;
        }
        if ($settings === null) {
            $settings = new InvokeSettings();
        }
        $context = $this->getContext($settings);
        $invokeHandler = $this->invokeHandler;
        if (is_callable($callback)) {
            if (is_array($callback)) {
                $f = new ReflectionMethod($callback[0], $callback[1]);
            } else {
                $f = new ReflectionFunction($callback);
            }
            $n = $f->getNumberOfParameters();
            $onError = $this->onError;
            return Future\all($args)->then(function ($args) use($invokeHandler, $name, $context, $n, $callback, $onError) {
                $result = Future\toFuture($invokeHandler($name, $args, $context));
                $result->then(function ($result) use($n, $callback, $args) {
                    switch ($n) {
                        case 0:
                            call_user_func($callback);
                            break;
                        case 1:
                            call_user_func($callback, $result);
                            break;
                        case 2:
                            call_user_func($callback, $result, $args);
                            break;
                        case 3:
                            call_user_func($callback, $result, $args, null);
                            break;
                    }
                }, function ($error) use($n, $callback, $args, $name, $onError) {
                    switch ($n) {
                        case 0:
                            call_user_func($callback);
                            if (is_callable($onError)) {
                                call_user_func($onError, $name, $error);
                            }
                            break;
                        case 1:
                            call_user_func($callback, $error);
                            break;
                        case 2:
                            call_user_func($callback, $error, $args);
                            break;
                        case 3:
                            call_user_func($callback, null, $args, $error);
                            break;
                    }
                });
                return $result;
            });
        } else {
            if ($this->async) {
                $args = Future\all($args);
                return $args->then(function ($args) use($invokeHandler, $name, $context) {
                    return $invokeHandler($name, $args, $context);
                });
            }
            return $invokeHandler($name, $args, $context);
        }
    }