示例#1
0
 /**
  * Adds new message
  *
  * @param MessageDescriptor $message Message
  *
  * @return null
  */
 public function addMessage(MessageDescriptor $message)
 {
     $this->_messages[$message->getName()] = $message;
 }
示例#2
0
 /**
  * Resolves message field types
  *
  * @param MessageDescriptor $descriptor Message descriptor
  * @param FileDescriptor    $file       File descriptor
  *
  * @throws Exception
  * @return null
  */
 private function _resolveMessageFieldTypes(MessageDescriptor $descriptor, FileDescriptor $file)
 {
     foreach ($descriptor->getFields() as $field) {
         if ($field->isProtobufScalarType()) {
             continue;
         }
         $namespace = $field->getNamespace();
         if (is_null($namespace)) {
             if (($type = $descriptor->findType($field->getType())) !== false) {
                 $field->setTypeDescriptor($type);
                 continue;
             }
             $exists = $this->_namespaces[$file->getPackage()][$field->getType()];
             if (isset($exists)) {
                 $field->setTypeDescriptor($this->_namespaces[$file->getPackage()][$field->getType()]);
                 continue;
             }
             $exists = isset($this->_namespaces[self::$_globalNamespace]) && isset($this->_namespaces[self::$_globalNamespace][$field->getType()]);
             if ($exists) {
                 $field->setTypeDescriptor($this->_namespaces[self::GLOBAL_NAMESPACE][$field->getType()]);
                 continue;
             }
             throw new Exception('Type ' . $field->getType() . ' not defined');
         } else {
             if ($namespace[0] == '.') {
                 if ($namespace == '.') {
                     $namespace = '';
                 } else {
                     $namespace = substr($namespace, 1);
                 }
                 if (!isset($this->_namespaces[$namespace])) {
                     throw new Exception('Namespace \'' . $namespace . '\' for type ' . $field->getType() . ' not defined');
                 }
                 if (!isset($this->_namespaces[$namespace][$field->getType()])) {
                     throw new Exception('Type ' . $field->getType() . ' not defined in ' . $namespace);
                 }
                 $field->setTypeDescriptor($this->_namespaces[$namespace][$field->getType()]);
             } else {
                 $type = $descriptor->findType($field->getType(), $field->getNamespace());
                 if ($type !== false) {
                     $field->setTypeDescriptor($type);
                     continue;
                 }
                 if (!isset($this->_namespaces[$namespace])) {
                     throw new Exception('Namespace ' . $namespace . ' for type ' . $field->getType() . ' not defined');
                 }
                 $exists = isset($this->_namespaces[$namespace][$field->getType()]);
                 if (!$exists) {
                     throw new Exception('Type ' . $field->getType() . ' not defined in ' . $namespace);
                 }
                 $field->setTypeDescriptor($this->_namespaces[$namespace][$field->getType()]);
             }
         }
     }
     foreach ($descriptor->getNested() as $nested) {
         $this->_resolveMessageFieldTypes($nested, $file);
     }
 }
 /**
  * Adds nested message
  *
  * @param MessageDescriptor $nested Message
  *
  * @return null
  */
 public function addNested(MessageDescriptor $nested)
 {
     $this->_nested[$nested->getName()] = $nested;
 }