如何在`Photon Server`中的`onEvent()`中获取`EventData`

时间:2015-02-24 12:18:26

标签: android hashmap photon

我正在使用multiplayer开展Photon Server游戏。我使用HashMaps通过loadBalancingPeer.opRaiseEvent发送一些数据,但我无法获取onEvent LoadBalancingClient函数中的数据。

这是我的自定义事件代码。

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}。 请帮助我在哪里出错。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

我没有使用过Photon,但在查看了API文档之后,我认为你做错了。 EventData也是一种Map。

如果举起活动,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;
}

注意::现在我非常有信心它应该有用。