I'm looking for some idea of how to handle Reliable Messages in Google Play Services with libGDX. So far I've been using it like this: I was waiting for message with OnRealTimeMessageReceivedListener
, setting an outside byte[]
array to the message received, changing a flag that suggests that new message arrived to true, getting that message in my libGDX class using methods from interface, setting newMessage
flag again to false, handling message, and so again waiting for new one
private OnRealTimeMessageReceivedListener mMessageRecievedHandler = new OnRealTimeMessageReceivedListener() {
@Override
public void onRealTimeMessageReceived(@NonNull RealTimeMessage realTimeMessage) {
//Handle received message here
byte[] message = realTimeMessage.getMessageData();
/*byte tbye[] = message;
ByteBuffer bb = ByteBuffer.wrap(tbye);
if(bb.getFloat() == 1884) {
Log.d("MESSAGETEST", "Message received in anL : " + debugIntL);
debugIntL++;
} */
byteArray = message;
newMessageFlag = true;
}
};
@Override
public boolean getNewMessageFlag() {
return newMessageFlag;
}
@Override
public byte[] getMessage() {
newMessageFlag = false;
return byteArray;
}
Libgdx class:
@Override
public void render (float delta) {
...
checkForNewMessage();
...
}
private void checkForNewMessage() {
if(game.customHandler.getNewMessageFlag()) {
handleMessage(); // handling message here
}
}
private void handleMessage() {
byte[] message = game.customHandler.getMessage();
ByteBuffer bb = ByteBuffer.wrap(message);
float typeOfMessage = bb.getFloat();
if(typeOfMessage == NEW_UNIT_MESSAGE) {
Gdx.app.log("MESSAGETEST", "Message received in gdx : " + debugInt);
debugInt++;
...
}
}
But the result is, when uncommenting the code in OnRealTimeMessageReceivedListener
and adding similar log to my handleMessage();
that some messages are skipped between receiving it in listener and checking for new in my libGDX class, I don't know why, maybe because some render
calls take longer to do everything inside and it skips through one check call when there's significant number of those in small amount of time
On the image you can see that first log is from OnRealTimeMessageReceivedListener
, which receives every message, but the second one is from handleMessage
, and at 251 there it wasn't called, so handleMessage
just skipped this message and went to the next one.
So here's my question, what's good way to handle those messages so that I won't skip any?