Я получаю сообщение protobuf (синтаксис 2) с другого сервера на C ++ и с другого сервера на php, я получаю то же сообщение protobuf (синтаксис 3). Теперь моя цель - расшифровать это сообщение.
Ниже представлены файлы:
Файл .proto:
syntax="proto3";
message ModuleDescriptor {
string name = 1;
string identifier = 2;
string version = 3;
float frequency = 4;
}
message RuntimeStatistic {
double sliceConsumption = 1;
}
message ModuleStatistic {
ModuleDescriptor module = 1;
RuntimeStatistic runtimeStatistic = 2;
}
message ModuleStatistics {
repeated ModuleStatistic moduleStatistics = 1; //this is the message that i receive
}
Этот прото-файл генерирует 4 класса. Вот класс ModuleStatistics:
<?php
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: ModuleStatistics.proto
use Google\Protobuf\Internal\GPBType;
use Google\Protobuf\Internal\RepeatedField;
use Google\Protobuf\Internal\GPBUtil;
/**
* Protobuf type <code>ModuleStatistics</code>
*/
class ModuleStatistics extends \Google\Protobuf\Internal\Message
{
/**
* <code>repeated .ModuleStatistic moduleStatistics = 1;</code>
*/
private $moduleStatistics;
public function __construct() {
\GPBMetadata\ModuleStatistics::initOnce();
parent::__construct();
}
/**
* <code>repeated .ModuleStatistic moduleStatistics = 1;</code>
*/
public function getModuleStatistics()
{
return $this->moduleStatistics;
}
/**
* <code>repeated .ModuleStatistic moduleStatistics = 1;</code>
*/
public function setModuleStatistics(&$var)
{
$arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \ModuleStatistic::class);
$this->moduleStatistics = $arr;
}
}
index.php файл:
include_once './vendor/autoload.php';
require_once("generated_proto/GPBMetadata/ModuleStatistics.php");
require_once("generated_proto/ModuleDescriptor.php");
require_once("generated_proto/RuntimeStatistic.php");
require_once("generated_proto/ModuleStatistic.php");
require_once("generated_proto/ModuleStatistics.php");
...
$protoClass = new ModuleStatistics(); //MoudleStatitistics is a generated class from protobuff
$protoClass -> mergeFromString($receivedString); //decode the string received from the c++ server
echo $protoClass ->getModuleStatistics(); // getModuleStatisics() is a function in the generated class ModulseStatistics.
...
Это весь код, который у меня есть для буферов протокола.
Теперь, когда я пытаюсь попасть внутрь функции getModuleStatistics()
, она выдает мне эту ошибку: PHP Catchable fatal error: Object of class ModuleStatistics could not be converted to string in /app/index.php on line 41
mergeFromString()
не выдает ошибок, но и не запускает ничего повторно.
Я получаю только 1 из 4 сообщений прото файла. Но, как вы можете видеть, это вложенное сообщение. Мне нужно получать все 4 сообщения? А потом, может быть, установить их друг на друга?