Пример #1
0
 public function start()
 {
     $this->onStart();
     $this->base = event_base_new();
     if ($this->_server) {
         $this->event = event_new();
         event_set($this->event, $this->_server, EV_READ | EV_PERSIST, array($this, 'accept'), $this->base);
         event_base_set($this->event, $this->base);
         event_add($this->event);
     }
     if ($this->_service) {
         $this->service_event = event_new();
         event_set($this->service_event, $this->_service, EV_READ | EV_PERSIST, array($this, 'service'), $this->base);
         event_base_set($this->service_event, $this->base);
         event_add($this->service_event);
     }
     if ($this->_master) {
         $this->master_event = event_new();
         event_set($this->master_event, $this->_master, EV_READ | EV_PERSIST | EV_WRITE, array($this, 'master'), $this->base);
         event_base_set($this->master_event, $this->base);
         event_add($this->master_event);
     }
     if ($this->timer) {
         $timer = event_timer_new();
         event_timer_set($timer, array($this, '_onTimer'), $timer);
         event_base_set($timer, $this->base);
         //event_timer_pending($timer, $this->timer * 1000000);
         event_timer_add($timer, $this->timer * 1000000);
     }
     event_base_loop($this->base);
 }
 public function start()
 {
     $this->base = event_base_new();
     if ($this->_server) {
         $this->event = event_new();
         event_set($this->event, $this->_server, EV_READ | EV_PERSIST, array($this, 'accept'), $this->base);
         event_base_set($this->event, $this->base);
         event_add($this->event);
     }
     foreach ($this->_services as $serviceId => $service) {
         $event = event_new();
         event_set($event, $service, EV_READ | EV_PERSIST | EV_WRITE, array($this, 'service'), $this->base);
         event_base_set($event, $this->base);
         event_add($event);
         $this->events[$serviceId] = $event;
     }
     if ($this->timer) {
         $timer = event_timer_new();
         event_timer_set($timer, array($this, '_onTimer'), $timer);
         event_base_set($timer, $this->base);
         //event_timer_pending($timer, $this->timer * 1000000);
         event_timer_add($timer, $this->timer * 1000000);
     }
     event_base_loop($this->base);
 }
Пример #3
0
 /**
  * Initialize a new stream listener
  */
 public function __construct($fn, $interval)
 {
     $this->fn = $fn;
     $this->interval = $interval;
     $this->event = event_timer_new();
     event_timer_set($this->event, array($this, 'tick'));
     Loop::attachEvent($this->event, $this->interval * 1000);
 }
Пример #4
0
 public function setTimeout($callback, $interval_ms)
 {
     $base = \Event\Emitter::getBase();
     $event = event_timer_new();
     $arg = array($callback, $event, $interval_ms);
     event_timer_set($event, array($this, 'ev_timer'), $arg);
     event_base_set($event, $base);
     event_add($event, $interval_ms * 1000);
 }
Пример #5
0
 /**
  * {@inheritdoc}
  */
 public function start(Timer $timer)
 {
     if (!isset($this->timers[$timer])) {
         $event = event_new();
         event_timer_set($event, $this->callback, $timer);
         event_base_set($event, $this->base);
         $this->timers[$timer] = $event;
         event_add($event, $timer->getInterval() * self::MICROSEC_PER_SEC);
     }
 }
Пример #6
0
 public function __construct($cb, $timeout = null, $id = null, $priority = null)
 {
     if ($id === null) {
         $id = ++self::$counter;
     }
     $this->id = $id;
     $this->cb = $cb;
     $this->ev = event_timer_new();
     $timer = $this;
     event_timer_set($this->ev, array($this, 'eventCall'));
     event_base_set($this->ev, Daemon::$process->eventBase);
     if ($priority !== null) {
         $this->setPriority($priority);
     }
     if ($timeout !== null) {
         $this->timeout($timeout);
     }
     Timer::$list[$id] = $this;
 }
Пример #7
0
 /**
  * Prepares the event to be used
  *
  * @see event_timer_set
  * @link undocumented function
  *
  * @see event_base_set
  * @link http://www.php.net/manual/en/function.event-base-set.php
  *
  * @param callable $callback Callback function to be called when the matching event occurs.
  * @param array $arguments
  * @param bool $persist
  *
  * @throws EventException|\InvalidArgumentException
  *
  * @return self
  */
 public function prepare($callback, array $arguments = array(), $persist = false)
 {
     if ($this->enabled) {
         $this->disable();
     }
     if (!is_callable($callback)) {
         throw new \InvalidArgumentException('Callback must be callable.');
     }
     if (false === event_base_set($this->resource, $this->base->getResource())) {
         throw $this->exception('Could not set event base (event_base_set).');
     }
     $this->arguments = $arguments;
     $this->callback = $callback;
     $this->persist = (bool) $persist;
     $this->prepared = true;
     $this->base->registerEvent($this);
     event_timer_set($this->resource, array($this, 'onTimer'));
     return $this;
 }
Пример #8
0
 function afterFork()
 {
     $this->initialize();
     foreach ($this->watchers as $watcherId => $watcher) {
         $eventResource = event_new();
         $watcher->eventResource = $eventResource;
         switch ($watcher->type) {
             case self::$TYPE_STREAM:
                 $wrapper = $this->wrapStreamCallback($watcher);
                 event_set($eventResource, $watcher->stream, $watcher->streamFlags, $wrapper);
                 break;
             case self::$TYPE_ONCE:
                 $wrapper = $this->wrapOnceCallback($watcher);
                 event_timer_set($eventResource, $wrapper);
                 break;
             case self::$TYPE_REPEATING:
                 $wrapper = $this->wrapRepeatingCallback($watcher);
                 event_timer_set($eventResource, $wrapper);
                 break;
         }
         $watcher->wrapper = $wrapper;
         event_base_set($eventResource, $this->base);
         if ($watcher->isEnabled) {
             event_add($eventResource, $watcher->interval);
         }
     }
 }
Пример #9
0
 /**
  * Schedule a timer for execution.
  *
  * @param TimerInterface $timer
  */
 private function scheduleTimer(TimerInterface $timer)
 {
     $this->timerEvents[$timer] = $event = event_timer_new();
     event_timer_set($event, $this->timerCallback, $timer);
     event_base_set($event, $this->eventBase);
     event_add($event, $timer->getInterval() * self::MICROSECONDS_PER_SECOND);
 }
Пример #10
0
 /**
  * {@inheritDoc}
  */
 public function repeat(callable $callback, $msInterval, array $options = [])
 {
     assert($msInterval >= 0, "\$msInterval at Argument 2 expects integer >= 0");
     $msInterval *= 1000;
     if (isset($options["ms_delay"])) {
         $msDelay = (int) $options["ms_delay"];
         assert($msDelay >= 0, "ms_delay option expects integer >= 0");
         $msDelay *= 1000;
     } else {
         $msDelay = $msInterval;
     }
     $watcher = $this->initWatcher(Watcher::TIMER_REPEAT, $callback, $options);
     $watcher->msInterval = (int) $msInterval;
     \event_timer_set($watcher->eventResource, $this->wrapCallback($watcher));
     \event_base_set($watcher->eventResource, $watcher->eventBase);
     if ($watcher->isEnabled) {
         \event_add($watcher->eventResource, $msDelay);
     }
     return $watcher->id;
 }
Пример #11
0
 protected function addTimerInternal($interval, $callback, $periodic = false)
 {
     if ($interval < self::MIN_TIMER_RESOLUTION) {
         throw new \InvalidArgumentException('Timer events do not support sub-millisecond timeouts.');
     }
     if (!is_callable($callback)) {
         throw new \InvalidArgumentException('The callback must be a callable object.');
     }
     $timer = (object) array('loop' => $this, 'resource' => $resource = event_new(), 'callback' => $callback, 'interval' => $interval * 1000000, 'periodic' => $periodic, 'cancelled' => false);
     $timer->signature = spl_object_hash($timer);
     $that = $this;
     $callback = function () use($timer, $that, &$callback) {
         if ($timer->cancelled === false) {
             call_user_func($timer->callback, $timer->signature, $timer->loop);
             if ($timer->periodic === true && $timer->cancelled === false) {
                 event_add($timer->resource, $timer->interval);
             } else {
                 $that->cancelTimer($timer->signature);
             }
         }
     };
     event_timer_set($resource, $callback);
     event_base_set($resource, $this->base);
     event_add($resource, $interval * 1000000);
     $this->timers[$timer->signature] = $timer;
     return $timer->signature;
 }
 protected function addTimerInternal($interval, $callback, $periodic = false)
 {
     if ($interval < self::MIN_TIMER_RESOLUTION) {
         throw new \InvalidArgumentException('Timer events do not support sub-millisecond timeouts.');
     }
     $timer = new Timer($this, $interval, $callback, $periodic);
     $resource = event_new();
     $timers = $this->timers;
     $timers->attach($timer, $resource);
     $callback = function () use($timers, $timer, &$callback) {
         if (isset($timers[$timer])) {
             call_user_func($timer->getCallback(), $timer);
             if ($timer->isPeriodic() && isset($timers[$timer])) {
                 event_add($timers[$timer], $timer->getInterval() * 1000000);
             } else {
                 $timer->cancel();
             }
         }
     };
     event_timer_set($resource, $callback);
     event_base_set($resource, $this->base);
     event_add($resource, $interval * 1000000);
     return $timer;
 }