protected function spawn()
 {
     $this->startingProcesses++;
     $current = $this->processCollection->current();
     $promise = $current($this->loop, $this->options);
     $promise->then(function (Messenger $messenger) {
         $worker = new Worker($messenger);
         $this->workers[] = $worker;
         $worker->on('done', function (WorkerInterface $worker) {
             $this->workerAvailable($worker);
         });
         $worker->on('terminating', function (WorkerInterface $worker) {
             foreach ($this->workers as $key => $value) {
                 if ($worker === $value) {
                     unset($this->workers[$key]);
                     break;
                 }
             }
         });
         $this->workerAvailable($worker);
         $this->startingProcesses--;
     });
     $this->processCollection->next();
     if (!$this->processCollection->valid()) {
         $this->processCollection->rewind();
     }
 }
 public function testMessage()
 {
     $message = Factory::message(['t']);
     $messenger = Phake::mock('WyriHaximus\\React\\ChildProcess\\Messenger\\Messenger');
     $worker = new Worker($messenger);
     $worker->message($message);
     Phake::verify($messenger)->message($message);
 }
 protected function spawn($processCollection, $options)
 {
     $workerDone = function (WorkerInterface $worker) {
         $this->workerAvailable($worker);
     };
     $current = $processCollection->current();
     $promise = $current($this->loop, $options);
     $promise->then(function (Messenger $messenger) use($workerDone) {
         $worker = new Worker($messenger);
         $this->workers[] = $worker;
         $worker->on('done', $workerDone);
         $this->workerAvailable($worker);
     });
     $processCollection->next();
     if (!$processCollection->valid()) {
         $processCollection->rewind();
     }
 }