我正在使用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}
。
请帮助我在哪里出错。
提前谢谢。
答案 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;
}
注意::现在我非常有信心它应该有用。