code: public static function runDedicatedWorker($workerImpl)
      {
          $channel = self::getChannelFactory()->createChannel(Source::fromInput(), Sink::fromOutput());
          if ($workerImpl instanceof RawWorkerImplementationInterface) {
              $workerImpl->run($channel);
          } elseif ($workerImpl instanceof EventedWorkerImplementationInterface) {
              $loop = self::getLoop();
              Selectable::registerRead($loop, $channel, function () use ($loop, $channel, $workerImpl) {
                  try {
                      $message = $channel->receiveMessage();
                  } catch (IOException\UnderflowException $e) {
                      Selectable::unregisterRead($loop, $channel);
                      $workerImpl->onDisconnect($channel);
  
                      return;
                  }
                  $workerImpl->onMessage($message, $channel, null);
              });
              $workerImpl->setLoop($loop);
              $workerImpl->initialize();
              $workerImpl->onConnect($channel, null);
              $loop->run();
              $workerImpl->terminate();
          } else {
              throw new Exception\InvalidArgumentException('Bad worker implementation');
          }
      }
docs: @param RawWorkerImplementationInterface|EventedWorkerImplementationInterface $workerImpl
  
  @throws Exception\InvalidArgumentException