/** * Get argument for serialization * * @return array */ public function getArgumentsForSerialization() { $a = []; $args = $this->getArguments(); $argsKw = $this->getArgumentsKw(); if ($args !== null && is_array($args) && count($args) > 0) { $a = array_merge($a, [$args]); if ($argsKw !== null && Message::isAssoc($argsKw) && count((array) $argsKw) > 0) { $a = array_merge($a, [$argsKw]); } } else { if ($argsKw !== null && Message::isAssoc($argsKw) && count((array) $argsKw) > 0) { $a = array_merge($a, [[], $argsKw]); } } return $a; }
/** * process call * * @param \Thruway\ClientSession $session * @param string $procedureName * @param mixed $arguments * @param mixed $argumentsKw * @param mixed $options * @return \React\Promise\Promise */ public function call(ClientSession $session, $procedureName, $arguments = null, $argumentsKw = null, $options = null) { //This promise gets resolved in Caller::processResult $futureResult = new Deferred(); $requestId = Session::getUniqueId(); $this->callRequests[$requestId] = ["procedure_name" => $procedureName, "future_result" => $futureResult]; if (!(is_array($options) && Message::isAssoc($options))) { if ($options !== null) { Logger::warning($this, "Options don't appear to be the correct type."); } $options = new \stdClass(); } $callMsg = new CallMessage($requestId, $options, $procedureName, $arguments, $argumentsKw); $session->sendMessage($callMsg); return $futureResult->promise(); }