2015-02-24 5 views
0

Я работаю над multiplayer, используя Photon Server. Я отправляю некоторые данные, используя HashMaps через loadBalancingPeer.opRaiseEvent, но я не могу получить данные в onEvent функции LoadBalancingClient.Как получить `EventData` в` onEvent() `в` Photon Server`

Вот мой код события.

public void sendSomeEvent(int playerPosition) { 

     HashMap<Object, Object> eventContent = new HashMap<Object, Object>(); 
     eventContent.put("key1", "ABC"); 

     this.loadBalancingPeer.opRaiseEvent((byte) 1, eventContent, false, 
       (byte) 0); // this is received by OnEvent() 
    } 

Адрес onEvent().

@Override 
public void onEvent(EventData eventData) { 
    super.onEvent(eventData); 

    switch (eventData.Code) { 
    case (byte) 1: 
     String value = (String) eventData.Parameters 
       .get("key1"); 
     ApplicationManager.onEventReceived(ab); 
     break;  
    } 
    // update the form/gui 
    ApplicationManager.onClientUpdateCallback(); 
} 

В этой функции я получаю null значение, но оно показывает данные patameter в этой форме {-11={key1=ABC}, -2=1}. Пожалуйста, помогите мне, где я ошибаюсь. Спасибо заранее.

+0

Вы используете переменную value –

+0

Добавляем '-11' в карту? –

+0

@ ρяσѕρєяK Я тоже смущен, почему он показывает значения в этом формате, я не отправляю '-11' или' -2'. –

ответ

1

Я не использовал Photon, но, посмотрев документы API, я думаю, что вы делаете что-то неправильно. EventData также является видом карты.

В случае поднятого случае значение eventData.Code должно быть на самом деле OpertationCode.RaiseEvent и ваше мероприятие (byte) 1 будет отображаться с ключом EventCode.Code на карте.

В этом EventData код события отображается с ключом EventCode.Code, и ваши данные сопоставляются с ключом ParameterCode.Data.

Итак ... чтобы получить отправленный хэш из EventData, вам необходимо сделать eventData.get(ParameterCode.Code).

я думаю нижеследующий должен хорошо работать. Попробуйте и дайте мне подробный журнал ошибок, если это не сработает.

switch (eventData.Code) { 
    // If it is a RaiseEvent 
    case OperationCode.RaiseEvent: 
     switch (eventData.get(EventCode.Code)) { 
      // If it is your event. 
      case (byte) 1: 
       HashMap< Object, Object > map = (HashMap<Object, Object>) eventData.get(ParameterCode.Data); 

       HashMap< String, String > smap = new HashMap< String, String >(); 
       for(Object key : map.keySet()) { 
        smap.put((String) key, (String) map.get(key)); 
       } 
       // Now smap is the HashMap<String, String> that you sent. 
       // do something 
       break; 
     } 
     break; 
} 

Примечание: Теперь я уверен, что он должен работать.

+0

большое спасибо. Это работает. –

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