Zephir Documentation v0.0.5-dev
Class
Class PhalconPlus RPC Client Adapter

# Local

    namespace PhalconPlus\RPC\Client\Adapter;
    use PhalconPlus\RPC\Client\AbstractClient;
    use PhalconPlus\Base\ProtoBuffer;

    class Local extends AbstractClient
    {
        private config;

        private di;

        public function __construct(<\Phalcon\DI> di)
        {
            let this->di = di;
            let this->config = di->get("config");
        }

        private function callByParams(string! service, string! method,  request) ->
        {
            var serviceClass, serviceObj, response;
            let serviceClass = service->upperfirst() . "Service";
            let serviceObj = new {serviceClass}(this->di);
            if is_callable([serviceObj, method]) {
                error_log("ServerClass: " . serviceClass);
                error_log("InvokeMethod: " . method);
                error_log("InputParma: " . var_export(request, true));
                let response = call_user_func_array([serviceObj, method], [request]);
                return response;
            } else {
                throw new \Exception("No service is found");
            }
        }

        public function callByObject(array rawData)
        {
            var service, method, request;
            // log
            error_log("Local callByObject: " . var_export(rawData, true));

            if !fetch service, rawData["service"] {
                throw new \Exception("service " . service . " not exists");
            }

            if !fetch method, rawData["method"] {
                throw new \Exception("method " . method . " not exists");
            }

            if !fetch request, rawData["args"] {
                throw new \Exception("args not exists");
            }

            let service = trim(service);
            let method = trim(method);

            if empty service || empty method {
                throw new \Exception("service:method(args) must exists. All of them!!!");
            }

            error_log("Invoke callByParams");
            return this->callByParams(service, method, request);
        }
    }