M
MagnumVulcanos
Guest
Solved: Endian problem, switched ByteBuffer order in java and that solved it.
I'm using the ByteBuffer class from java in order to write to a byte[] array, and then I'm sending it as a DatagramPacket through a DatagramSocket.
This is the code:
So far so good it seems, the packet is sent out correctly and the GMS2 client receives it, here's the async event:
When the packet is received, the "messageId" shows as 16777216, instead of 3, I have checked the docs and the java int type is a signed 32bit integer (buffer_s32) in the eyes of gamemaker, so what is going wrong?
I'm using the ByteBuffer class from java in order to write to a byte[] array, and then I'm sending it as a DatagramPacket through a DatagramSocket.
This is the code:
Code:
byte[] dataOut = new byte[1024];
ByteBuffer bufferOut = ByteBuffer.wrap(dataOut);
bufferOut.clear();
bufferOut.putInt(MessageTypes.CONNECT_RESPONSE); // 3
if (good_connect) { // boolean is false if password is incorrect and other checks are failed
console.log("Client <"+inLoginAlias+"> connected");
Client client = new Client(console, inetAddress, inLoginAlias, inLoginPassHash, clients.size());
clients.add(client);
bufferOut.put((byte) 1);//good connect
} else {
bufferOut.put((byte) 0);//bad connect
}
DatagramPacket packetOut = new DatagramPacket(dataOut, dataOut.length, inetAddress, PORT_CLIENT);
try {
datagramSocket.send(packetOut);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Code:
if (async_load[? "type"] == network_type_data) {
var bufferIn = async_load[? "buffer"];
buffer_seek(bufferIn, buffer_seek_start, 0);
var messageId = buffer_read(bufferIn, buffer_s32); /* ERROR HERE */ //reading an int
show_debug_message("message id: "+string(messageId)); // <==== 16777216
switch (messageId) {
case MessageType.CONNECT_RESPONSE:
//receive response from server to connect request
var response = buffer_read(bufferIn, buffer_s8);//reading a byte
if (response == 0) {
show_debug_message("denied connection");
} else if (response == 1) {
show_debug_message("accepted connection");
}
break;
}
}
Last edited by a moderator: