コード例 #1
0
ファイル: Decoder.php プロジェクト: KingCrunch/FastCGI
 public function write($data)
 {
     if (!$this->writeable) {
         return;
     }
     $this->buffer .= $data;
     while (strlen($this->buffer) >= 8) {
         $header = Header::decode(substr($this->buffer, 0, 8));
         if (strlen($this->buffer) < $header->getPayloadLength() + 8) {
             return;
         }
         $record = Record::decode($header, substr($this->buffer, 8, $header->getLength()) ?: '');
         $this->buffer = substr($this->buffer, 8 + $header->getPayloadLength()) ?: '';
         if ($record->getType()->isBeginRequest()) {
             if (isset($this->requestParser[$record->getRequestId()])) {
                 throw new \Exception('RequestID already in use!');
             }
             $this->requestParser[$record->getRequestId()] = new RequestParser();
         }
         if ($request = $this->requestParser[$record->getRequestId()]->pushRecord($record)) {
             unset($this->requestParser[$record->getRequestId()]);
             $receiver = $this->requestReceiver;
             $receiver($request);
         }
     }
 }
コード例 #2
0
ファイル: Client.php プロジェクト: KingCrunch/FastCGI
 private function read($data)
 {
     $this->data .= $data;
     while (strlen($this->data) >= 8) {
         $header = Header::decode(substr($this->data, 0, 8));
         if (strlen($this->data) < $header->getPayloadLength() + 8) {
             return;
         }
         $rawRecord = substr($this->data, 8, $header->getLength());
         $record = Record::decode($header, $rawRecord);
         $this->data = substr($this->data, 8 + $header->getPayloadLength());
         if ($response = $this->responseBuilders[$header->getRequestId()]->pushRecord($record)) {
             $this->promises[$header->getRequestId()]->resolve($response);
         }
     }
 }
コード例 #3
0
ファイル: Record.php プロジェクト: KingCrunch/FastCGI
 /**
  * @return RecordType
  */
 public function getType()
 {
     return $this->header->getType();
 }