/**
* Creates an event loop which takes orders from the parent process and executes
* them in runtime mode.
*
* @return void
*/
public function handleRequest()
{
$sequence = $this->bootstrap->buildRuntimeSequence();
$sequence->invoke($this->bootstrap);
$objectManager = $this->bootstrap->getObjectManager();
$systemLogger = $objectManager->get(SystemLoggerInterface::class);
$systemLogger->log('Running sub process loop.', LOG_DEBUG);
echo "\nREADY\n";
try {
while (true) {
$commandLine = trim(fgets(STDIN));
$trimmedCommandLine = trim($commandLine);
$systemLogger->log(sprintf('Received command "%s".', $trimmedCommandLine), LOG_INFO);
if ($commandLine === "QUIT\n") {
break;
}
/** @var Request $request */
$request = $objectManager->get(RequestBuilder::class)->build($trimmedCommandLine);
$response = new Response();
if ($this->bootstrap->isCompiletimeCommand($request->getCommand()->getCommandIdentifier())) {
echo "This command must be executed during compiletime.\n";
} else {
$objectManager->get(Dispatcher::class)->dispatch($request, $response);
$response->send();
$this->emitDispatchedCommandLineSlaveRequest();
}
echo "\nREADY\n";
}
$systemLogger->log('Exiting sub process loop.', LOG_DEBUG);
$this->bootstrap->shutdown(Bootstrap::RUNLEVEL_RUNTIME);
exit($response->getExitCode());
} catch (\Exception $exception) {
$this->handleException($exception);
}
}