Hi,
I'm seeing a server exception every time I send from a javascript client a QuickJoinGameRequest.
The exception:
I have a GMSInitializer properly configured from the admin panel. Besides, I dont understand where the code that searches for a game should go.Code:15:10:24,647 [AnonymousIoService-12] ERROR TransactionTiming - Exception proces sing message com.electrotank.electroserver5.messages.client.request.ClientCreate OrJoinGameRequestMessage@14ff81a java.lang.NullPointerException at java.util.concurrent.ConcurrentHashMap.get(Unknown Source) at com.electrotank.electroserver5.entities.managers.GameManager.findCand idates(GameManager.java:343) at com.electrotank.electroserver5.entities.managers.GameManager.findGame s(GameManager.java:292) at com.electrotank.electroserver5.entities.managers.GameManager.createOr JoinGame(GameManager.java:88) at com.electrotank.electroserver5.servers.registry.transactions.CreateOr JoinGameTransaction.execute(CreateOrJoinGameTransaction.java:47) at com.electrotank.electroserver5.servers.registry.transactions.SinglePe rsonTransaction.execute(SinglePersonTransaction.java:34) at com.electrotank.electroserver5.servers.registry.transactions.SinglePe rsonTransaction.execute(SinglePersonTransaction.java:16) at com.electrotank.electroserver5.servers.registry.transactions.Transact ionHandlerImpl.processMessage(TransactionHandlerImpl.java:170) at com.electrotank.electroserver5.servers.registry.RegistryEndpoint.doRe ceive(RegistryEndpoint.java:213) at com.electrotank.electroserver5.servers.registry.RegistryEndpoint.rece ive(RegistryEndpoint.java:97) at com.electrotank.electroserver5.servers.gateway.GatewayEndpoint.write( GatewayEndpoint.java:74) at com.electrotank.electroserver5.servers.gateway.GatewayEndpoint.write( GatewayEndpoint.java:86) at com.electrotank.electroserver5.servers.gateway.transactions.ClientMes sageToRegistryForwarder.forward(ClientMessageToRegistryForwarder.java:31) at com.electrotank.electroserver5.protocol.mina.AbstractClientIoHandler. forward(AbstractClientIoHandler.java:155) at com.electrotank.electroserver5.protocol.mina.AbstractClientIoHandler. messageReceived(AbstractClientIoHandler.java:129) at com.electrotank.electroserver5.protocol.mina.DisconnectedClientIoHand ler.messageReceived(DisconnectedClientIoHandler.java:86) at org.apache.mina.common.support.AbstractIoFilterChain$TailFilter.messa geReceived(AbstractIoFilterChain.java:570) at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageR eceived(AbstractIoFilterChain.java:299) at org.apache.mina.common.support.AbstractIoFilterChain.access$1100(Abst ractIoFilterChain.java:53) at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.mess ageReceived(AbstractIoFilterChain.java:648) at org.apache.mina.common.IoFilterAdapter.messageReceived(IoFilterAdapte r.java:80) at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageR eceived(AbstractIoFilterChain.java:299) at org.apache.mina.common.support.AbstractIoFilterChain.access$1100(Abst ractIoFilterChain.java:53) at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.mess ageReceived(AbstractIoFilterChain.java:648) at com.electrotank.electroserver5.protocol.mina.crypto.DHKeyExchangeIoFi lter.messageReceived(DHKeyExchangeIoFilter.java:36) at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageR eceived(AbstractIoFilterChain.java:299) at org.apache.mina.common.support.AbstractIoFilterChain.access$1100(Abst ractIoFilterChain.java:53) at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.mess ageReceived(AbstractIoFilterChain.java:648) at com.electrotank.electroserver5.protocol.mina.ProtocolFilter.messageRe ceived(ProtocolFilter.java:87) at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageR eceived(AbstractIoFilterChain.java:299) at org.apache.mina.common.support.AbstractIoFilterChain.access$1100(Abst ractIoFilterChain.java:53) at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.mess ageReceived(AbstractIoFilterChain.java:648) at org.apache.mina.common.IoFilterAdapter.messageReceived(IoFilterAdapte r.java:80) at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageR eceived(AbstractIoFilterChain.java:299) at org.apache.mina.common.support.AbstractIoFilterChain.access$1100(Abst ractIoFilterChain.java:53) at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.mess ageReceived(AbstractIoFilterChain.java:648) at org.apache.mina.filter.codec.support.SimpleProtocolDecoderOutput.flus h(SimpleProtocolDecoderOutput.java:58) at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(Prot ocolCodecFilter.java:174) at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageR eceived(AbstractIoFilterChain.java:299) at org.apache.mina.common.support.AbstractIoFilterChain.access$1100(Abst ractIoFilterChain.java:53) at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.mess ageReceived(AbstractIoFilterChain.java:648) at com.electrotank.electroserver5.protocol.mina.http.HttpRequestDispatch er.messageReceived(HttpRequestDispatcher.java:154) at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageR eceived(AbstractIoFilterChain.java:299) at org.apache.mina.common.support.AbstractIoFilterChain.access$1100(Abst ractIoFilterChain.java:53) at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.mess ageReceived(AbstractIoFilterChain.java:648) ...
GMSInitializer:
Code:package com.snailwars; import com.electrotank.electroserver5.extensions.BaseExtensionLifecycleEventHandler; import com.electrotank.electroserver5.extensions.api.value.EsObject; import com.electrotank.electroserver5.extensions.api.value.EsObjectRO; import com.electrotank.electroserver5.extensions.api.value.ExtensionComponentConfiguration; import com.electrotank.electroserver5.extensions.api.value.GameConfiguration; import com.electrotank.electroserver5.extensions.api.value.RoomConfiguration; /** * * @author Joan */ public class GMSInitializer extends BaseExtensionLifecycleEventHandler { @Override public void init(EsObjectRO ignored) { // use the name of the extension that will contain all the game plugins String extensionName = getApi().getExtensionName(); // invoke the initialization method for each of your games initOneGame(extensionName); } private void initOneGame(String extensionName) { ExtensionComponentConfiguration gamePlugin = new ExtensionComponentConfiguration(); gamePlugin.setExtensionName(extensionName); gamePlugin.setHandle("SnailWarsGame");//Name by which the plugin can be addressed when instantiated in the room gamePlugin.setName("SnailWarsGame");//Name of the plugin in the Extension.xml file // Create the room configuration RoomConfiguration roomConfig = new RoomConfiguration(); roomConfig.setCapacity(2); roomConfig.setDescription("SnailWarsGame two players game"); //add the game plugin(s) roomConfig.addPlugin(gamePlugin); // temp testing: add a language filter // roomConfig.setUsingLanguageFilter(true); // roomConfig.setLanguageFilterSpecified(true); // roomConfig.setLanguageFilterName("MyWhiteFilter"); // Create the game configuration // When a user joins a room there are many events that user can potentially receive. // The default subscriptions for a user joining the game are defined here. GameConfiguration gameRoomConfig = new GameConfiguration(); gameRoomConfig.setReceivingRoomListUpdates(false); gameRoomConfig.setReceivingRoomVariableUpdates(false); gameRoomConfig.setReceivingUserListUpdates(true); gameRoomConfig.setReceivingUserVariableUpdates(true); gameRoomConfig.setReceivingVideoEvents(false); gameRoomConfig.setRoomConfiguration(roomConfig); //Create the default GameDetails object // When a game is created it has a game details EsObject associated with it. // This object is publicly seen in the game list, and can be accessed and modified // by the game itself. EsObject esob = new EsObject(); gameRoomConfig.setInitialGameDetails(esob); // Register the game // Once the game has been registered, users can create a new instance of this game // using the integrated game manager. // Plugins can also create a new game and put users into it. getApi().registerGameConfiguration("SnailWarsGame", gameRoomConfig); getApi().getLogger().warn("SnailWarsGame game registered with GameManager."); } }
The client request is done this way:
Any ideas?Code:var request = new QuickJoinGameRequest(); request.gameType = "SnailWarsGame"; request.zoneName = "General"; es.engine.send(request);
thanks


Reply With Quote
