radarrplexorganizrnginxsonarrdashboardembycouchpotatonzbgetbookmarkapplication-dashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdall
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							90 lines
						
					
					
						
							2.2 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							90 lines
						
					
					
						
							2.2 KiB
						
					
					
				| <?php | |
| 
 | |
| /* | |
|  * This file is part of the Symfony package. | |
|  * | |
|  * (c) Fabien Potencier <fabien@symfony.com> | |
|  * | |
|  * For the full copyright and license information, please view the LICENSE | |
|  * file that was distributed with this source code. | |
|  */ | |
| 
 | |
| namespace Symfony\Component\Process; | |
| 
 | |
| use Symfony\Component\Process\Exception\RuntimeException; | |
| 
 | |
| /** | |
|  * Provides a way to continuously write to the input of a Process until the InputStream is closed. | |
|  * | |
|  * @author Nicolas Grekas <p@tchwork.com> | |
|  */ | |
| class InputStream implements \IteratorAggregate | |
| { | |
|     /** @var callable|null */ | |
|     private $onEmpty = null; | |
|     private $input = []; | |
|     private $open = true; | |
| 
 | |
|     /** | |
|      * Sets a callback that is called when the write buffer becomes empty. | |
|      */ | |
|     public function onEmpty(callable $onEmpty = null) | |
|     { | |
|         $this->onEmpty = $onEmpty; | |
|     } | |
| 
 | |
|     /** | |
|      * Appends an input to the write buffer. | |
|      * | |
|      * @param resource|string|int|float|bool|\Traversable|null $input The input to append as scalar, | |
|      *                                                                stream resource or \Traversable | |
|      */ | |
|     public function write($input) | |
|     { | |
|         if (null === $input) { | |
|             return; | |
|         } | |
|         if ($this->isClosed()) { | |
|             throw new RuntimeException(sprintf('%s is closed', static::class)); | |
|         } | |
|         $this->input[] = ProcessUtils::validateInput(__METHOD__, $input); | |
|     } | |
| 
 | |
|     /** | |
|      * Closes the write buffer. | |
|      */ | |
|     public function close() | |
|     { | |
|         $this->open = false; | |
|     } | |
| 
 | |
|     /** | |
|      * Tells whether the write buffer is closed or not. | |
|      */ | |
|     public function isClosed() | |
|     { | |
|         return !$this->open; | |
|     } | |
| 
 | |
|     public function getIterator() | |
|     { | |
|         $this->open = true; | |
| 
 | |
|         while ($this->open || $this->input) { | |
|             if (!$this->input) { | |
|                 yield ''; | |
|                 continue; | |
|             } | |
|             $current = array_shift($this->input); | |
| 
 | |
|             if ($current instanceof \Iterator) { | |
|                 yield from $current; | |
|             } else { | |
|                 yield $current; | |
|             } | |
|             if (!$this->input && $this->open && null !== $onEmpty = $this->onEmpty) { | |
|                 $this->write($onEmpty($this)); | |
|             } | |
|         } | |
|     } | |
| }
 | |
| 
 |