如何在 `Photon Server` 的 `onEvent()` 中获取 `EventData`
How to get `EventData` in `onEvent()` in `Photon Server`
我正在使用 Photon Server
开发 multiplayer
游戏。我正在使用 HashMaps
通过 loadBalancingPeer.opRaiseEvent
发送一些数据,但我无法在 LoadBalancingClient
.
的 onEvent
函数中获取数据
这是我的自定义事件代码。
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
值,但它以这种形式显示参数数据 {-11={key1=ABC}, -2=1}
。
请帮助我哪里出错了。
提前致谢。
我没有使用过 Photon,但在查看 API 文档后,我认为你做错了。 EventData 也是一种地图。
如果引发事件,eventData.Code
的值实际上应该是 OpertationCode.RaiseEvent
并且您的事件 ( byte ) 1
将映射到映射中的键 EventCode.Code
。
在此 EventData 中,事件代码映射到键 EventCode.Code
,您的数据映射到键 ParameterCode.Data
。
所以...要从 EventData
中获取已发送的 hashmap,您需要执行 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;
}
注意 :: 现在我非常有信心它应该可以工作。
我正在使用 Photon Server
开发 multiplayer
游戏。我正在使用 HashMaps
通过 loadBalancingPeer.opRaiseEvent
发送一些数据,但我无法在 LoadBalancingClient
.
onEvent
函数中获取数据
这是我的自定义事件代码。
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
值,但它以这种形式显示参数数据 {-11={key1=ABC}, -2=1}
。
请帮助我哪里出错了。
提前致谢。
我没有使用过 Photon,但在查看 API 文档后,我认为你做错了。 EventData 也是一种地图。
如果引发事件,eventData.Code
的值实际上应该是 OpertationCode.RaiseEvent
并且您的事件 ( byte ) 1
将映射到映射中的键 EventCode.Code
。
在此 EventData 中,事件代码映射到键 EventCode.Code
,您的数据映射到键 ParameterCode.Data
。
所以...要从 EventData
中获取已发送的 hashmap,您需要执行 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;
}
注意 :: 现在我非常有信心它应该可以工作。