/**
  * @param $exitCode
  * @param InputInterface $input
  * @param OutputInterface $output
  */
 public function onPeridotEnd($exitCode, InputInterface $input, OutputInterface $output)
 {
     $this->emitter->removeListener('peridot.end', [$this, 'onPeridotEnd']);
     if (!$input->getOption('watch')) {
         return;
     }
     $watcher = $this->getWatcher();
     $watcher->setInput($input);
     $watcher->setOutput($output);
     $watcher->setCriteria($this->getFileCriteria());
     $this->watch($watcher);
 }
Exemplo n.º 2
0
 /**
  *
  * @param EventEmitterInterface $emitter
  * @param string[] $fulfillEvents
  * @param string[] $rejectEvents
  * @param string[] $notifyEvents
  * @return ExtendedPromiseInterface
  */
 public static function listen(EventEmitterInterface $emitter, array $fulfillEvents = [], array $rejectEvents = [], array $notifyEvents = [])
 {
     $listeners = [];
     $removeListeners = function () use($emitter, &$listeners) {
         foreach ($listeners as $event => $callback) {
             $emitter->removeListener($event, $callback);
         }
         $listeners = [];
     };
     $promise = new Promise(function ($resolve, $reject, $notify) use($emitter, &$listeners, $fulfillEvents, $rejectEvents, $notifyEvents) {
         $listeners = array_merge(static::registerCallbacks($emitter, $fulfillEvents, $resolve), static::registerCallbacks($emitter, $rejectEvents, $reject), static::registerCallbacks($emitter, $notifyEvents, $notify));
     }, $removeListeners);
     return $promise->always($removeListeners);
 }
Exemplo n.º 3
0
 /**
  * Detach the plugin.
  */
 public function detach(EventEmitterInterface $emitter)
 {
     $emitter->removeListener('suite.define', [$this, 'onSuiteDefine']);
     $emitter->removeListener('suite.start', [$this, 'onSuiteStart']);
 }
Exemplo n.º 4
0
/**
 * Creates a `Promise` which resolves with an array of all the event data
 *
 * @param ReadableStreamInterface|WritableStreamInterface $stream
 * @param string                                          $event
 * @return CancellablePromiseInterface Promise<string, Exception>
 */
function all(EventEmitterInterface $stream, $event = 'data')
{
    // stream already ended => resolve with empty buffer
    if ($stream instanceof ReadableStreamInterface) {
        // readable or duplex stream not readable => already closed
        // a half-open duplex stream is considered closed if its readable side is closed
        if (!$stream->isReadable()) {
            return Promise\resolve(array());
        }
    } elseif ($stream instanceof WritableStreamInterface) {
        // writable-only stream (not duplex) not writable => already closed
        if (!$stream->isWritable()) {
            return Promise\resolve(array());
        }
    }
    $buffer = array();
    $bufferer = function ($data) use(&$buffer) {
        $buffer[] = $data;
    };
    $stream->on($event, $bufferer);
    $promise = new Promise\Promise(function ($resolve, $reject) use($stream, &$buffer) {
        $stream->on('error', function ($error) use($reject) {
            $reject(new \RuntimeException('An error occured on the underlying stream while buffering', 0, $error));
        });
        $stream->on('close', function () use($resolve, &$buffer) {
            $resolve($buffer);
        });
    }, function ($_, $reject) {
        $reject(new \RuntimeException('Cancelled buffering'));
    });
    return $promise->then(null, function ($error) use(&$buffer, $bufferer, $stream, $event) {
        // promise rejected => clear buffer and buffering
        $buffer = array();
        $stream->removeListener($event, $bufferer);
        throw $error;
    });
}
 /**
  * Removes the given listener for the given event.
  *
  * @param string $event Must be one of state machine's $supported_events, hence one of the ON_* constants.
  * @param callable $listener
  */
 public function removeListener($event, callable $listener)
 {
     $this->event_emitter->removeListener($event, $listener);
 }