/** * Create child process and set up RPC endpoints. * * @param \WyriHaximus\React\ChildProcess\Messenger\Messenger $messenger * @param \React\EventLoop\LoopInterface $loop */ public function __construct(Messenger $messenger, LoopInterface $loop) { $this->recipient = $messenger; $this->loop = $loop; $this->recipient->registerRpc('config', [$this, 'rpcConfig']); $this->recipient->registerRpc('modifyKarma', [$this, 'rpcModifyKarma']); $this->recipient->registerRpc('fetchKarma', [$this, 'rpcFetchKarma']); }
/** * Process constructor. * @param LoopInterface $loop * @param Messenger $messenger */ protected function __construct(LoopInterface $loop, Messenger $messenger) { $this->loop = $loop; $this->messenger = $messenger; $this->messenger->registerRpc(MessengerFactory::PROCESS_REGISTER, function (Payload $payload) { if (!is_subclass_of($payload['className'], 'WyriHaximus\\React\\ChildProcess\\Messenger\\ChildInterface')) { throw new \Exception('Given class doesn\'t implement ChildInterface'); } $this->registerClass($payload['className']); $this->deregisterRpc(); return \React\Promise\resolve([]); }); }
protected function __construct(Messenger $messenger, LoopInterface $loop) { $messenger->registerRpc('return', function (Payload $payload) { return \React\Promise\resolve($payload->getPayload()); }); $this->ran = true; }
/** * Process constructor. * @param Messenger $messenger */ protected function __construct(Messenger $messenger) { $messenger->registerRpc('setFlysystem', [$this, 'setFlysystem']); $messenger->registerRpc('unlink', [$this, 'unlink']); $messenger->registerRpc('stat', [$this, 'stat']); $messenger->registerRpc('readdir', [$this, 'readdir']); $messenger->registerRpc('read', [$this, 'read']); $messenger->registerRpc('write', [$this, 'write']); $messenger->registerRpc('rename', [$this, 'rename']); }
/** * @param LoopInterface $loop * @param array $options * @param null $termiteCallable * @return Messenger */ public static function child(LoopInterface $loop, array $options = [], $termiteCallable = null) { $messenger = new Messenger(new Stream(STDIN, $loop), new Stream(STDOUT, $loop), new Stream(STDERR, $loop), ['read' => 'stdin', 'write_err' => 'stderr', 'write' => 'stdout'] + $options); if ($termiteCallable === null) { $termiteCallable = function () use($loop) { $loop->addTimer(self::TERMINATE_TIMEOUT, [$loop, 'stop']); }; } $messenger->registerRpc(Messenger::TERMINATE_RPC, function (Payload $payload, Messenger $messenger) use($loop, $termiteCallable) { $messenger->emit('terminate', [$messenger]); $termiteCallable($payload, $messenger); return new FulfilledPromise(); }); return $messenger; }