2016-02-24 4 views
0

Мы получаем эту функцию обратного вызова с помощью ExitGames Фотон в реальном времени двигатель, когда событие вызываетсяКак получить данные из словаря Фотон eventContent

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

+0

Вы уверены, что справочник имеет тип 'Словарь <байт, ExitGames :: Общие :: Object>'? Что вы подразумеваете под * «это не имеет никакого смысла» *? Что вы подразумеваете под * «шляпа тоже не работает» *? Пожалуйста, будьте более конкретными. –

+0

И есть ли причина, по которой ваш 'customEventAction' не ждет' const Dictionary & 'в качестве третьего параметра? –

+0

ExitGames :: Common :: Dictionary pdic = ExitGames :: Common :: ValueObject > (eventContent) .getDataCopy(); – user3162134

ответ

2
ExitGames::Common::Dictionary<nByte, ExitGames::Common::Object> dic = ExitGames::Common::ValueObject<ExitGames::Common::Dictionary<nByte, ExitGames::Common::Object> >(eventContent).getDataCopy(); 

является абсолютно правильным и работает для меня.

Причина вашей проблемы должна быть внутри другой линии.

При замене реализаций SendEvent() и customEventAction() в demo_loadBalancing внутри одного из ++ клиента SDKs 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); 
} 

Это дает мне следующую строку вывода на принимающем клиенте:

получил следующую строку как значение словаря: тест

 Смежные вопросы

  • Нет связанных вопросов^_^