58 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace React\EventLoop\Tick;
 | |
| 
 | |
| use React\EventLoop\LoopInterface;
 | |
| use SplQueue;
 | |
| 
 | |
| class NextTickQueue
 | |
| {
 | |
|     private $eventLoop;
 | |
|     private $queue;
 | |
| 
 | |
|     /**
 | |
|      * @param LoopInterface $eventLoop The event loop passed as the first parameter to callbacks.
 | |
|      */
 | |
|     public function __construct(LoopInterface $eventLoop)
 | |
|     {
 | |
|         $this->eventLoop = $eventLoop;
 | |
|         $this->queue = new SplQueue();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Add a callback to be invoked on the next tick of the event loop.
 | |
|      *
 | |
|      * Callbacks are guaranteed to be executed in the order they are enqueued,
 | |
|      * before any timer or stream events.
 | |
|      *
 | |
|      * @param callable $listener The callback to invoke.
 | |
|      */
 | |
|     public function add(callable $listener)
 | |
|     {
 | |
|         $this->queue->enqueue($listener);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Flush the callback queue.
 | |
|      */
 | |
|     public function tick()
 | |
|     {
 | |
|         while (!$this->queue->isEmpty()) {
 | |
|             call_user_func(
 | |
|                 $this->queue->dequeue(),
 | |
|                 $this->eventLoop
 | |
|             );
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Check if the next tick queue is empty.
 | |
|      *
 | |
|      * @return boolean
 | |
|      */
 | |
|     public function isEmpty()
 | |
|     {
 | |
|         return $this->queue->isEmpty();
 | |
|     }
 | |
| }
 |