Exemplo n.º 1
0
Arquivo: IO.php Projeto: techart/tao
 /**
  * Возвращает объект класса IO.Stream.ResourceStream, соответствующий stderr.
  *
  * @return IO_Stream_ResourceStream
  */
 public static function stderr($stderr = null)
 {
     if ($stderr instanceof IO_Stream_AbstractStream) {
         self::$stderr = $stderr;
     }
     return self::$stderr ? self::$stderr : (self::$stderr = IO_Stream::ResourceStream(STDERR));
 }
Exemplo n.º 2
0
 /**
  * Работа с флагами операций потока.
  */
 public function testOpFlags()
 {
     /* Создание заглушек объектов */
     $context = $this->getMock('IO_Stream_Context_Interface');
     $opts = $this->getMock('Options_Interface');
     /* Один раз будет создан новый объект настроек */
     $context->expects($this->once())->method('createOptions')->will($this->returnValue($opts));
     /* Один раз будут установлены опции */
     $opts->expects($this->once())->method('apply');
     $stream = IO_Stream::create($context);
     $read = IO_Stream::OPERATION_READ;
     $write = IO_Stream::OPERATION_WRITE;
     $accept = IO_Stream::OPERATION_ACCEPT;
     /* Ни один флаг интереса не установлен */
     $this->assertFalse($stream->getInterest($read));
     $this->assertFalse($stream->getInterest($write));
     $this->assertFalse($stream->getInterest($accept));
     /* Также ни один флаг готовности не установлен */
     $this->assertFalse($stream->getReady($read));
     $this->assertFalse($stream->getReady($write));
     $this->assertFalse($stream->getReady($accept));
     /* Устанавливаем все флаги интереса и проверяем fluent interface */
     $this->assertEquals($stream, $stream->setInterest($read));
     $this->assertEquals($stream, $stream->setInterest($write));
     $this->assertEquals($stream, $stream->setInterest($accept));
     /* Все флаги интереса должны быть установлены */
     $this->assertTrue($stream->getInterest($read));
     $this->assertTrue($stream->getInterest($write));
     $this->assertTrue($stream->getInterest($accept));
     /* Устанавливаем все флаги готовности + fluent interface */
     $this->assertEquals($stream, $stream->setReady($read));
     $this->assertEquals($stream, $stream->setReady($write));
     $this->assertEquals($stream, $stream->setReady($accept));
     /* Все флаги готовности должны быть установлены */
     $this->assertTrue($stream->getReady($read));
     $this->assertTrue($stream->getReady($write));
     $this->assertTrue($stream->getReady($accept));
     /* Проверяем сброс отдельного интереса + fluent interface */
     $this->assertEquals($stream, $stream->resetInterest($read));
     $this->assertFalse($stream->getInterest($read));
     /* Сбрасываем все флаги интереса и проверяем fluent interface */
     $this->assertEquals($stream, $stream->resetAllInterest());
     /* Все флаги интереса должны быть сброшены */
     $this->assertFalse($stream->getInterest($read));
     $this->assertFalse($stream->getInterest($write));
     $this->assertFalse($stream->getInterest($accept));
     /* Сбрасываем все флаг готовности и проверяем fluent interface */
     $this->assertEquals($stream, $stream->resetAllReady());
     /* Все флаги готовности должны быть сброшены */
     $this->assertFalse($stream->getReady($read));
     $this->assertFalse($stream->getReady($write));
     $this->assertFalse($stream->getReady($accept));
 }
Exemplo n.º 3
0
 /**
  * Записывает данные в поток из буфера записи.
  * 
  * @param  int $length Размер в байтах блока данных для записи в поток.
  * @return int Количество записанных байт.
  */
 public function write($length)
 {
     /* Если в буфере ничего нет, */
     if ($this->_write_buffer->getLength() <= 0) {
         /* то мы ничего и не делаем :) */
         return 0;
     }
     /* Переходим к началу буфера */
     $this->_write_buffer->rewind();
     /* Считываем блок данных необходимого размера */
     $data = $this->_write_buffer->read($length);
     /* И записываем его в поток */
     $bytes_written = parent::write($data);
     /* Если чего-то записалось, */
     if ($bytes_written > 0) {
         /* то удаляем из буфера записанный блок */
         $this->_write_buffer->release($bytes_written);
     }
     return $bytes_written;
 }
Exemplo n.º 4
0
Arquivo: Proc.php Projeto: techart/tao
 /**
  * Запускает процесс
  *
  * @return Proc_Process
  */
 public function run()
 {
     $pipes = array();
     if ($this->id = proc_open($this->command, $this->run_options, $pipes, $this->working_dir, $this->environment)) {
         if (isset($pipes[0])) {
             $this->input = IO_Stream::ResourceStream($pipes[0]);
         }
         if (isset($pipes[1])) {
             $this->output = IO_Stream::ResourceStream($pipes[1]);
         }
         if (isset($pipes[2])) {
             $this->error = IO_Stream::ResourceStream($pipes[2]);
         }
         $this->run_options = null;
     }
     return $this;
 }
Exemplo n.º 5
0
 /**
  * Устанавливает выходной поток во временный фаил
  *
  * @return IO_Stream_TemporaryStream
  */
 public function to_temporary_stream()
 {
     $this->to_stream($stream = IO_Stream::TemporaryStream());
     return $stream;
 }