Пример #1
0
 /**
  * @param \Icicle\Loop\UvLoop $loop
  * @param \Icicle\Loop\Events\EventFactoryInterface $factory
  */
 public function __construct(UvLoop $loop, EventFactoryInterface $factory)
 {
     parent::__construct($loop, $factory);
     $loopHandle = $loop->getLoopHandle();
     $signalCallback = $this->createSignalCallback();
     $callback = function ($sigHandle, int $signo) use($signalCallback) {
         $signalCallback($signo);
     };
     foreach ($this->getSignalList() as $signo) {
         $sigHandle = \uv_signal_init($loopHandle);
         \uv_signal_start($sigHandle, $callback, $signo);
         $this->sigHandles[$signo] = $sigHandle;
     }
 }
Пример #2
0
 /**
  * {@inheritdoc}
  */
 protected function enableSignalWatcher(SignalWatcher $watcher)
 {
     if ($watcher->event === null) {
         if (isset($this->signalEvents[$watcher->signo])) {
             $watcher->event = $this->signalEvents[$watcher->signo];
         } else {
             $watcher->event = \uv_signal_init($this->loop);
         }
     }
     if (!\uv_is_active($watcher->event)) {
         \uv_signal_start($watcher->event, $this->signalCallback, $watcher->signo);
     }
     $this->signalWatchers[$watcher->signo][$watcher->id] = $watcher;
 }
Пример #3
0
 /**
  * {@inheritDoc}
  */
 public function onSignal($signo, callable $func, array $options = [])
 {
     $watcher = new \StdClass();
     $watcher->id = $watcherId = \spl_object_hash($watcher);
     $watcher->type = Watcher::SIGNAL;
     $watcher->callback = $this->wrapSignalCallback($watcher, $func);
     $watcher->cbData = @$options["cb_data"];
     $watcher->isEnabled = isset($options["enable"]) ? (bool) $options["enable"] : true;
     $watcher->keepAlive = isset($options["keep_alive"]) ? (bool) $options["keep_alive"] : true;
     $this->keepAliveCount += $watcher->isEnabled && $watcher->keepAlive;
     $watcher->signo = $signo;
     $watcher->uvHandle = \uv_signal_init($this->loop);
     if (empty($watcher->keepAlive)) {
         \uv_unref($watcher->uvHandle);
     }
     if ($watcher->isEnabled) {
         \uv_signal_start($watcher->uvHandle, $watcher->callback, $watcher->signo);
     }
     $this->watchers[$watcherId] = $watcher;
     return $watcherId;
 }