/**
  * @return PromiseInterface
  */
 protected function requeue()
 {
     if ($this->queue->count() === 0) {
         return new FulfilledPromise();
     }
     return \React\Promise\resolve($this->queue->dequeue())->then(function (Rpc $rpc) {
         return \React\Promise\resolve($this->memory->enqueue($rpc));
     });
 }
 /**
  * @param ProcessCollectionInterface $processCollection
  * @param LoopInterface $loop
  * @param array $options
  */
 public function __construct(ProcessCollectionInterface $processCollection, LoopInterface $loop, array $options = [])
 {
     $this->loop = $loop;
     $this->options = $options;
     $this->queue = \WyriHaximus\React\ChildProcess\Pool\getQueue($this->options, 'WyriHaximus\\React\\ChildProcess\\Pool\\Queue\\Memory', $loop);
     $this->manager = \WyriHaximus\React\ChildProcess\Pool\getManager($this->options, $processCollection, 'WyriHaximus\\React\\ChildProcess\\Pool\\Manager\\Fixed', $loop);
     $this->manager->on('ready', function (WorkerInterface $worker) {
         $this->emit('worker', [$worker]);
         if ($this->queue->count() === 0) {
             return;
         }
         \React\Promise\resolve($this->queue->dequeue())->then(function (Rpc $message) use($worker) {
             $hash = spl_object_hash($message);
             $this->deferreds[$hash]->resolve($worker->rpc($message));
             unset($this->deferreds[$hash]);
         });
     });
 }
 /**
  * @dataProvider queueProvider
  */
 public function testOperations(QueueInterface $queue)
 {
     $rpc0 = Factory::rpc('a', ['b']);
     $rpc1 = Factory::rpc('c', ['d']);
     $rpc2 = Factory::rpc('e', ['f']);
     $this->assertSame(0, $queue->count());
     $queue->enqueue($rpc0);
     $this->assertSame(1, $queue->count());
     $queue->enqueue($rpc1);
     $this->assertSame(2, $queue->count());
     $queue->enqueue($rpc2);
     $this->assertSame(3, $queue->count());
     $this->assertSame(json_encode($rpc0), json_encode($this->dequeue($queue->dequeue())));
     $this->assertSame(2, $queue->count());
     $this->assertSame(json_encode($rpc1), json_encode($this->dequeue($queue->dequeue())));
     $this->assertSame(1, $queue->count());
     $this->assertSame(json_encode($rpc2), json_encode($this->dequeue($queue->dequeue())));
     $this->assertSame(0, $queue->count());
 }