Отправка данных с помощью Hashtable в Photon Cloud

Я пытаюсь отправить данные с помощью Hashtable в фотонном облаке, я получаю данные с правильным кодом события, но пара ключ-значение возвращает некоторые случайные числа. Мой код выглядит так при отправке данных: -

void NetworkLogic::sendEvent(void)
{
    ExitGames::Common::Hashtable* table =new ExitGames::Common::Hashtable;
        table->put<int,int>(4,21);
        const ExitGames::Common::Hashtable temp = (const ExitGames::Common::Hashtable)*table;//= new ExitGames::Common::Hashtable;
        mLoadBalancingClient.opRaiseEvent(false, temp, 100);
}

При получении данных код такой: -

void NetworkLogic::customEventAction(int playerNr, nByte eventCode, const ExitGames::Common::Hashtable& eventContent)
{
    // you do not receive your own events, unless you specify yourself as one of the receivers explicitly, so you must start 2 clients, to receive the events, which you have sent, as sendEvent() uses the default receivers of opRaiseEvent() (all players in same room like the sender, except the sender itself)
    PhotonPeer_sendDebugOutput(&mLoadBalancingClient, DEBUG_LEVEL_ALL, L"");
    cout<<((int)(eventContent.getValue(4)));
}

То, что я печатаю на консоли, — это какие-то случайные значения или int, хотя должно быть 21. Что я здесь делаю неправильно?

Изменить:
В customEventAction(), когда я использовал следующее утверждение:

cout<<eventContent.getValue(4)->getType()<<endl;
cout<<"Event code = "<<eventCode<<endl;

Я получил следующий вывод:

i
Event code = d

Я искал и обнаружил, что 'i' является значением EG_INTEGER, что означает, что значение, которое я отправляю, получает правильно. Я просто не смог преобразовать его обратно в int. И почему код события приходит как 'd'?


person noob    schedule 10.12.2012    source источник
comment
Пожалуйста, не обращайте внимания на последнюю строку. Я забыл привести код события к int, поэтому он печатал char:/   -  person noob    schedule 10.12.2012


Ответы (1)


eventContent.getValue(4)

возвращает объект. Вы не можете просто привести этот объект к типу int, но должны получить доступ к значению int внутри него:

if(eventContent.getValue(4))
            myInt = ExitGames::Common::ValueObject<int>(eventContent.getValue(4)).getDataCopy();
cout << myInt;
person Kaiserludi    schedule 11.12.2012
comment
Благодаря тонну. Этот код сработал, хотя мне нужно внести некоторые незначительные изменения, которые я сделал и в вашем ответе. Еще раз спасибо, теперь моя многопользовательская игра будет завершена. - person noob; 12.12.2012