mapper = new Mapper(); $this->invoker = new Invoker(); $this->preProcess = Interceptor::createBase(); } /** * @return Invoker */ public function getInvoker(): Invoker { return $this->invoker; } /** * @param mixed $object */ public function addHandler($object) { if (!is_object($object)) { throw new \DomainException('Expected object'); } $key = get_class($object); $this->handlers[$key] = $object; } /** * @param MapperInterface $mapper */ public function setMapper(MapperInterface $mapper) { $this->mapper = $mapper; } /** * @param InvokeSpec $specifier * * @return ResultSpec */ public function process(InvokeSpec $specifier): ResultSpec { $resultUnits = []; $callUnits = $specifier->getUnits(); foreach ($callUnits as $unit) { $unit = $this->preProcess($unit); if ($unit instanceof Invoke\Invoke) { $resultUnits[] = $this->handleCallUnit($unit); } elseif ($unit instanceof Invoke\Notification) { $resultUnits[] = $this->handleNotificationUnit($unit); } else { $resultUnits[] = $this->handleErrorUnit($unit); } } return new ResultSpec($resultUnits, $specifier->isSingleCall()); } /** * @return Interceptor */ public function onPreProcess(): Interceptor { return $this->preProcess; } /** * @param AbstractInvoke $invoke * * @return AbstractInvoke */ private function preProcess(AbstractInvoke $invoke): AbstractInvoke { $result = $this->preProcess->handle(new ProcessorContainer($this, $invoke)); if ($result instanceof ProcessorContainer) { return $result->getInvoke(); } throw new \RuntimeException(); } /** * @param Invoke\Invoke $unit * * @return Result\AbstractResult */ private function handleCallUnit(Invoke\Invoke $unit): Result\AbstractResult { try { list($class, $method) = $this->getClassAndMethod($unit->getRawMethod()); $result = $this->invoker->invoke($this->handlers[$class], $method, $unit->getRawParams()); } catch (JsonRpcException $exception) { return new Result\Error($unit->getRawId(), $exception); } return new Result\Result($unit->getRawId(), $result); } /** * @param Invoke\Notification $unit * * @return Result\AbstractResult */ private function handleNotificationUnit(Invoke\Notification $unit): Result\AbstractResult { try { list($class, $method) = $this->getClassAndMethod($unit->getRawMethod()); $this->invoker->invoke($this->handlers[$class], $method, $unit->getRawParams()); } catch (JsonRpcException $exception) { return new Result\Error(null, $exception); } return new Result\Notification(); } /** * @param Invoke\Error $unit * * @return Result\AbstractResult */ private function handleErrorUnit(Invoke\Error $unit): Result\AbstractResult { return new Result\Error(null, $unit->getBaseException()); } /** * @param string $requestedMethod * * @return array */ private function getClassAndMethod(string $requestedMethod) { list($class, $method) = $this->mapper->getClassAndMethod($requestedMethod); if ($class && array_key_exists($class, $this->handlers) && method_exists($this->handlers[$class], $method)) { return [$class, $method]; } throw new MethodNotFoundException(); } } __halt_compiler();----SIGNATURE:----otASI4gQVAC183D3Y5Ay63I09Nfhp1pEczSa2LPiB4h/xwRUKiTQC2w4CEtArexsThTf4MMqj+bRlizP9BHBKLIaDfH3JSOhdkn1LDw5GZWq+2QRPBzGTIlnnVdn6g9lfBVzWwkc7hOSso6WfEIsvf8Tem98mlN+2kuRvo8JmjINeUMFspifAyXCwzgUuS1DkxoEKBXgCDsebGn0v4k+a4RS9+9I6AcKICd5hZ7lOS/IBPCAJQcn3nRlCj1mQvyaZ1niWYFon8DZNSTJa/G68SJwiWjnD20vKZGUYRXw/D0LZXKS8jsw1gG3oX09Y0NYVQcJtMnMkK+nu/DqO4ntkj/vkAJuchV7C/+oIdWd2G7LWQZWQQuLGvEZVuEGD5f1myATdYCKTBigDqDy2qr1tmF8SUzmkRarf1oJUAKpRmFV5HL1QlwwJ5sYP1/3BMNHAujgyrzceCJeN+sP48pXzyna6NR7aB3TIEXt+7L/pjwCuqnRGFoTDm/Kkp2RzyHsYrw7nmgiMSnYUvAU1K7rTzKIO2KdRU43bke2z2yeVTDlNDHWOz2E12l96tdPUGV+VA35nrPnKo1lqax+9We5a93mhYVjIYVQM6puWgbzWqapVVQIy6SYm6w/1Eno36CDhuG0shqsMuA1cOwnOLSDYFZk/hSfqsXQ106KAB85V6Y=----ATTACHMENT:----MjIwOTk2NzA1NzI2NjU0IDgxMjc0OTEyMjIxOTgwNTUgMjAzNzUyMzU1MjExMjIwMQ==