this may be a little long because i need to explain it.
i have a chunck of data being sent from a Game Maker client into i node server app, the data from the client is being assembled like so:
//argument0: socket
//argument1: buffer of data
//init
var packetSize = buffer_tell(argument1);
var bufPacket = buffer_create(1, buffer_grow, 1);
//write size, packet into new one
buffer_write(bufPacket, buffer_u8, packetSize + 1);
buffer_copy(argument1, 0, packetSize, bufPacket, 1);
buffer_seek(bufPacket, 0, packetSize + 1);
//send packet
network_send_raw(argument0, bufPacket, buffer_tell(bufPacket));
// destry buffers
buffer_delete(argument1);
buffer_delete(bufPacket);
and sent from this:
var register_packet = buffer_create(1, buffer_grow, 1);
buffer_write(register_packet, buffer_string, "register");
buffer_write(register_packet, buffer_string, txt_Username.text);
buffer_write(register_packet, buffer_string, txt_Password.text);
network_write(Network.socket, register_packet);
it is interpreted as this: Interpret: loginassasa where it should be Interpret: login ass asa
the parser code is:
parse: function(c, data) {
var idx = 0;
while (idx < data.length) {
var packetSize = data.readUInt8(idx);
var extractedPacket = new Buffer(packetSize);
data.copy(extractedPacket, 0, idx, idx + packetSize);
this.interpret(c, extractedPacket);
idx += packetSize;
}
}
and the interpret function:
interpret: function(c, datapacket){
var header = PacketModels.header.parse(datapacket);
console.log("Interpret: " + header.command);
switch (header.command.toUpperCase()){
case "LOGIN":
var data = PacketModels.login.parse(datapacket);
User.login(data.username, data.password, function(result, user){
console.log('Login result: ' + result)
if(result){
c.user = user;
c.enterroom(c.user.current_room);
c.socket.write(packet.build(["LOGIN", "TRUE", c.user.current_room, c.user.pos_x, c.user.pos_y, c.user.username]))
}else{
c.socket.write(packet.build(["LOGIN", "FALSE"]))
}
});
break;
case "REGISTER":
var data = PacketModels.register.parse(datapacket);
User.register(data.username, data.password, function(result){
if(result){
c.socket.write(packet.build(["REGISTER", "TRUE"]))
}else{
c.socket.write(packet.build(["REGISTER", "FALSE"]))
}
});
break;
}
it doesn't strip out the header command for the case switch to work, not really sure why it is failing, i works like a charm on a local machine, but now that im am trying to move to a digital-ocean cloud server, it cant seem to break up the packets, any help would be great. Thanks in advance, Jeff
Turns out I never really was able to fix this issue, after several days of trouble shooting, it appears the way the server is not receiving the packets in the expected format, as this project was my own and not client related, i had to set this aside and move on. Someday I hope to resume this project.