Google Protobuf3 Несколько строк в сообщении проблемы

У меня есть сообщение, которое выглядит так:

message Connected {
sint32 xloc   = 1; // x spawn world position
sint32 yloc   = 2; // y spawn world position
sint32 zrot   = 3; // z spawn rotation
string sector = 4; // sector name (unsure about this)
string name   = 5; // player name
string pid    = 6; // player id
string scolor = 7; // ship color
string sname  = 8; // ship name
}

Я пытаюсь инициализировать его в моем коде C ++, как это:

server::player::Connected connectMessage; // send this to this joining client
connectMessage.set_name("clientName");
connectMessage.set_pid("clientId");
connectMessage.set_scolor("shipColor");
connectMessage.set_sname("shipName");
connectMessage.set_xloc(0);
connectMessage.set_yloc(0);
connectMessage.set_zrot(0);

По какой-то причине, когда я устанавливаю свои строковые параметры, предыдущие строки до того, как они получают это строковое значение. Итак, если я сделаю set_pid, поле имени также изменится на pid. set_scolor имя & pid будет установлен на s_color. set_sname имя, pid & scolor изменится на имя. Кажется, что они все используют одно и то же расположение поля указателя строки.

Результатом каждого из строковых полей будет «shipName» после выполнения.

Я неправильно инициализирую свое сообщение? Или мне нужно сделать что-то по-другому здесь? Когда я сериализую свои сообщения из закодированного потока, я получаю ожидаемое сообщение, но ручное создание, похоже, не работает с тем, что я сейчас пытаюсь сделать.

Большое спасибо за информацию.

-1

Решение

Изменение использования повторного поля для моих строк, похоже, решило проблему.

message Connected {
sint32 xloc = 1; // x spawn world position
sint32 yloc = 2; // y spawn world position
sint32 zrot = 3; // z spawn rotation
// [0] => username
// [1] => userid
// [2] => shipcolor
// [3] => shipname
repeated string userinfo = 4;
}

Благодаря этому я могу вручную добавить новые строки в список повторяющихся строк.

server::player::Connected connectMessage;
connectMessage.set_xloc(stats.m_xPos);
connectMessage.set_yloc(stats.m_yPos);
connectMessage.set_zrot(stats.m_zRot);
// [0] => username
connectMessage.add_userinfo();
connectMessage.set_userinfo(0, stats.m_clientName);
// [1] => userid
connectMessage.add_userinfo();
connectMessage.set_userinfo(1, stats.m_clientId);
// [2] => shipcolor
connectMessage.add_userinfo();
connectMessage.set_userinfo(2, stats.m_shipColor);
// [3] => shipname
connectMessage.add_userinfo();
connectMessage.set_userinfo(3, stats.m_shipName);

Это определенно позволяет получить более чистый файл .proto, но странно, что проблема заключается в использовании отдельных строк.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector