Hi Nicolas,
I'm writing a nice multiplayer game with AndEngine and I've run into a problem with the multiplayer extension.
Example:
I start the server on my Nexus One and the client on my good old G1.
I use the G1, so it receives/reads the server messages and I can play on it.
Sometimes NullPointerException-s start to happen, the game gets stuck.
It seems like it happens inside the extension, so it can't obtain a new message from a MessagePool.
Do you have any idea where does this problem originate? Shouldn't the MessagePool be always able to return a message?
FYI: My server messages are around 190 bytes long and I'm using synchronized code in my screen update callback (where I actually process the message) and also in the message's set/write/read functions. I always synchronize to the message instance at all places, so nothing else will modify the message in any way until I processed the set/read/write/update screen callback on it.
Can this cause the extension to be unable to obtain a new message? If I don't syncronize, it may happen that the MessagePool will consider the message to be reusable before I finish reading data from it - I'm passing the data to the callback by reference, not as ~100-200 separate parameters. To avoid the need of such synchronization, it would be useful if the message had a method like setConsumed() and the callback would receive the message and could call setConsumed() on it right before returning.
(You can see from the logs that it heals after a while.)
Edit: Isn't this because the server is a lot more powerful than the client, so the client just can't process everything that comes in from the server? Anyway, it should just skip the "half of the messages" without getting stuck for seconds in my opinion.
Thanks for any help.
n4s
04-17 20:08:44.510 D/AndEngine( 761): FPS: 12.53 (MIN: 38 ms | MAX: 161 ms)
04-17 20:08:49.500 D/AndEngine( 761): FPS: 15.68 (MIN: 35 ms | MAX: 111 ms)
04-17 20:08:50.590 E/AndEngine( 761): AndEngine
04-17 20:08:50.590 E/AndEngine( 761): java.lang.NullPointerException
04-17 20:08:50.590 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.util.MessagePool.obtainMessage(MessagePool.java:61)
04-17 20:08:50.590 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.MessageReader.readMessage(MessageReader.java:62)
04-17 20:08:50.590 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.IServerMessageReader$ServerMessageReader.readMessage(IServerMessag
eReader.java:1)
04-17 20:08:50.590 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.connector.ServerConnector.read(ServerConnector.java:96)
04-17 20:08:50.590 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.Connection.run(Connection.java:80)
04-17 20:08:50.590 E/AndEngine( 761): AndEngine
04-17 20:08:50.590 E/AndEngine( 761): java.lang.NullPointerException
04-17 20:08:50.590 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.util.MessagePool.obtainMessage(MessagePool.java:61)
04-17 20:08:50.590 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.MessageReader.readMessage(MessageReader.java:62)
04-17 20:08:50.590 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.IServerMessageReader$ServerMessageReader.readMessage(IServerMessag
eReader.java:1)
04-17 20:08:50.590 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.connector.ServerConnector.read(ServerConnector.java:96)
04-17 20:08:50.590 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.Connection.run(Connection.java:80)
04-17 20:08:50.600 E/AndEngine( 761): AndEngine
04-17 20:08:50.600 E/AndEngine( 761): java.lang.NullPointerException
04-17 20:08:50.600 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.util.MessagePool.obtainMessage(MessagePool.java:61)
04-17 20:08:50.600 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.MessageReader.readMessage(MessageReader.java:62)
04-17 20:08:50.600 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.IServerMessageReader$ServerMessageReader.readMessage(IServerMessag
eReader.java:1)
04-17 20:08:50.600 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.connector.ServerConnector.read(ServerConnector.java:96)
04-17 20:08:50.600 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.Connection.run(Connection.java:80)
04-17 20:08:50.600 E/AndEngine( 761): AndEngine
04-17 20:08:50.600 E/AndEngine( 761): java.lang.NullPointerException
04-17 20:08:50.600 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.util.MessagePool.obtainMessage(MessagePool.java:61)
04-17 20:08:50.600 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.MessageReader.readMessage(MessageReader.java:62)
04-17 20:08:50.600 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.IServerMessageReader$ServerMessageReader.readMessage(IServerMessag
eReader.java:1)
04-17 20:08:50.600 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.connector.ServerConnector.read(ServerConnector.java:96)
04-17 20:08:50.600 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.Connection.run(Connection.java:80)
04-17 20:08:50.600 E/AndEngine( 761): AndEngine
04-17 20:08:50.600 E/AndEngine( 761): java.lang.NullPointerException
04-17 20:08:50.600 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.util.MessagePool.obtainMessage(MessagePool.java:61)
04-17 20:08:50.600 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.MessageReader.readMessage(MessageReader.java:62)
04-17 20:08:50.600 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.IServerMessageReader$ServerMessageReader.readMessage(IServerMessag
eReader.java:1)
04-17 20:08:50.600 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.connector.ServerConnector.read(ServerConnector.java:96)
04-17 20:08:50.600 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.Connection.run(Connection.java:80)
04-17 20:08:50.610 E/AndEngine( 761): AndEngine
04-17 20:08:50.610 E/AndEngine( 761): java.lang.NullPointerException
04-17 20:08:50.610 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.util.MessagePool.obtainMessage(MessagePool.java:61)
04-17 20:08:50.610 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.MessageReader.readMessage(MessageReader.java:62)
04-17 20:08:50.610 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.IServerMessageReader$ServerMessageReader.readMessage(IServerMessag
eReader.java:1)
04-17 20:08:50.610 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.connector.ServerConnector.read(ServerConnector.java:96)
04-17 20:08:50.610 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.Connection.run(Connection.java:80)
04-17 20:08:50.610 E/AndEngine( 761): AndEngine
04-17 20:08:50.610 E/AndEngine( 761): java.lang.NullPointerException
04-17 20:08:50.610 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.util.MessagePool.obtainMessage(MessagePool.java:61)
04-17 20:08:50.610 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.MessageReader.readMessage(MessageReader.java:62)
04-17 20:08:50.610 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.IServerMessageReader$ServerMessageReader.readMessage(IServerMessag
eReader.java:1)
04-17 20:08:50.610 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.connector.ServerConnector.read(ServerConnector.java:96)
04-17 20:08:50.610 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.Connection.run(Connection.java:80)
04-17 20:08:50.620 E/AndEngine( 761): AndEngine
04-17 20:08:50.620 E/AndEngine( 761): java.lang.NullPointerException
04-17 20:08:50.620 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.util.MessagePool.obtainMessage(MessagePool.java:61)
04-17 20:08:50.620 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.MessageReader.readMessage(MessageReader.java:62)
04-17 20:08:50.620 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.IServerMessageReader$ServerMessageReader.readMessage(IServerMessag
eReader.java:1)
04-17 20:08:50.620 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.connector.ServerConnector.read(ServerConnector.java:96)
04-17 20:08:50.620 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.Connection.run(Connection.java:80)
04-17 20:08:50.620 E/AndEngine( 761): AndEngine
04-17 20:08:50.620 E/AndEngine( 761): java.lang.NullPointerException
04-17 20:08:50.620 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.util.MessagePool.obtainMessage(MessagePool.java:61)
04-17 20:08:50.620 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.MessageReader.readMessage(MessageReader.java:62)
04-17 20:08:50.620 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.IServerMessageReader$ServerMessageReader.readMessage(IServerMessag
eReader.java:1)
04-17 20:08:50.620 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.connector.ServerConnector.read(ServerConnector.java:96)
04-17 20:08:50.620 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.Connection.run(Connection.java:80)
04-17 20:08:50.630 E/AndEngine( 761): AndEngine
04-17 20:08:50.630 E/AndEngine( 761): java.lang.NullPointerException
04-17 20:08:50.630 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.util.MessagePool.obtainMessage(MessagePool.java:61)
04-17 20:08:50.630 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.MessageReader.readMessage(MessageReader.java:62)
04-17 20:08:50.630 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.IServerMessageReader$ServerMessageReader.readMessage(IServerMessag
eReader.java:1)
04-17 20:08:50.630 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.connector.ServerConnector.read(ServerConnector.java:96)
04-17 20:08:50.630 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.Connection.run(Connection.java:80)
04-17 20:08:50.630 E/AndEngine( 761): AndEngine
04-17 20:08:50.630 E/AndEngine( 761): java.lang.NullPointerException
04-17 20:08:50.630 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.util.MessagePool.obtainMessage(MessagePool.java:61)
04-17 20:08:50.630 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.MessageReader.readMessage(MessageReader.java:62)
04-17 20:08:50.630 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.IServerMessageReader$ServerMessageReader.readMessage(IServerMessag
eReader.java:1)
04-17 20:08:50.630 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.connector.ServerConnector.read(ServerConnector.java:96)
04-17 20:08:50.630 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.Connection.run(Connection.java:80)
04-17 20:08:50.650 E/AndEngine( 761): AndEngine
04-17 20:08:50.650 E/AndEngine( 761): java.lang.NullPointerException
04-17 20:08:50.650 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.util.MessagePool.obtainMessage(MessagePool.java:61)
04-17 20:08:50.650 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.MessageReader.readMessage(MessageReader.java:62)
04-17 20:08:50.650 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.IServerMessageReader$ServerMessageReader.readMessage(IServerMessag
eReader.java:1)
04-17 20:08:50.650 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.connector.ServerConnector.read(ServerConnector.java:96)
04-17 20:08:50.650 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.Connection.run(Connection.java:80)
04-17 20:08:50.650 E/AndEngine( 761): AndEngine
04-17 20:08:50.650 E/AndEngine( 761): java.lang.NullPointerException
04-17 20:08:50.650 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.util.MessagePool.obtainMessage(MessagePool.java:61)
04-17 20:08:50.650 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.MessageReader.readMessage(MessageReader.java:62)
04-17 20:08:50.650 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.IServerMessageReader$ServerMessageReader.readMessage(IServerMessag
eReader.java:1)
04-17 20:08:50.650 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.connector.ServerConnector.read(ServerConnector.java:96)
04-17 20:08:50.650 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.Connection.run(Connection.java:80)
04-17 20:08:50.650 E/AndEngine( 761): AndEngine
04-17 20:08:50.650 E/AndEngine( 761): java.lang.NullPointerException
04-17 20:08:50.650 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.util.MessagePool.obtainMessage(MessagePool.java:61)
04-17 20:08:50.650 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.MessageReader.readMessage(MessageReader.java:62)
04-17 20:08:50.650 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.IServerMessageReader$ServerMessageReader.readMessage(IServerMessag
eReader.java:1)
04-17 20:08:50.650 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.client.connector.ServerConnector.read(ServerConnector.java:96)
04-17 20:08:50.650 E/AndEngine( 761): at org.anddev.andengine.extension.multiplayer.protocol.shared.Connection.run(Connection.java:80)
04-17 20:08:54.470 D/AndEngine( 761): FPS: 23.57 (MIN: 34 ms | MAX: 87 ms)
04-17 20:08:59.490 D/AndEngine( 761): FPS: 21.39 (MIN: 33 ms | MAX: 98 ms)
04-17 20:09:04.500 D/AndEngine( 761): FPS: 17.74 (MIN: 34 ms | MAX: 106 ms)
