Мы получаем этот обратный вызов, используя движок ExitGames Photon Realtime, когда происходит событие
customEventAction(int playerNr,
nByte eventCode,
const ExitGames::Common::Object& eventContent)
Если объект является строкой, мы используем этот код для его извлечения
ExitGames::Common::JString str =
ExitGames::Common::ValueObject<ExitGames::Common::JString>(eventContent).getDataCopy();
Однако отправляемый объект — это словарь. Он отправляется с сервера с помощью BroadcastEvent.
Как мы получаем данные из этого?
Мы попробовали это, но это не имеет никакого смысла:
ExitGames::Common::Dictionary<byte,ExitGames::Common::Object> pdic
= ExitGames::Common::ValueObject<ExitGames::Common::Dictionary<byte,ExitGames::Common::Object>>(eventContent).getDataCopy();
Я нашел код для получения данных из хеш-таблицы, но это тоже не работает.
Спасибо
Shaun
ExitGames::Common::Dictionary<nByte, ExitGames::Common::Object> dic = ExitGames::Common::ValueObject<ExitGames::Common::Dictionary<nByte, ExitGames::Common::Object> >(eventContent).getDataCopy();
абсолютно правильно и работает для меня.
Причина вашей проблемы должна быть в другой строке.
Когда вы заменяете реализации sendEvent () и customEventAction () в demo_loadBalancing в одном из SDK клиента Photon C ++ следующими фрагментами, тогда эта демонстрационная программа успешно отправляет и получает словарь:
Отправить:
void NetworkLogic::sendEvent(void)
{
ExitGames::Common::ValueObject<ExitGames::Common::JString> obj(L"test");
ExitGames::Common::Dictionary<nByte, ExitGames::Common::Object> dic;
dic.put(1, obj);
mLoadBalancingClient.opRaiseEvent(false, dic, 0);
}
Получать:
void NetworkLogic::customEventAction(int /*playerNr*/, nByte /*eventCode*/, const ExitGames::Common::Object& eventContent)
{
EGLOG(ExitGames::Common::DebugLevel::ALL, L"");
ExitGames::Common::Dictionary<nByte, ExitGames::Common::Object> dic = ExitGames::Common::ValueObject<ExitGames::Common::Dictionary<nByte, ExitGames::Common::Object> >(eventContent).getDataCopy();
const ExitGames::Common::Object* pObj = dic.getValue(1);
ExitGames::Common::JString str = ExitGames::Common::ValueObject<ExitGames::Common::JString>(pObj).getDataCopy();
mpOutputListener->write(L"received the following string as Dictionary value: " + str);
}
Это дает мне следующую строку вывода на принимающем клиенте:
получил в качестве значения словаря следующую строку: test
Других решений пока нет …