최대 1 분 소요

작동 오류 발견

일주일 동안 작동이 안 되던 원인을 드디어 알게 되었다. 나중에도 그것과 같은 문제가 발생할 수 있으니 적어보도록 하겠다.

export const Init = ({socket, id, payload}) => {
    const protos = getProtoMessages();
    const packet = protos.init.InitialPayload;
    const newbuff = Buffer.from(payload);
    const decodedpacket = packet.decode(newbuff);

    const playerId = decodedpacket.playerId;

    console.log(decodedpacket);
    addUser(playerId, socket);
    //console.log(getUserById(id));

    //----------------------------
    //response를 어떻게 할 것인가

    const response = protos.response.Response;
    const message = response.create({handlerId : 0, responseCode : 0, timestamp : 0, data : "string"});
    const messageBuffer = response.encode(message).finish();


    const lengthBuffer = Buffer.alloc(config.packet.totalLength);
    lengthBuffer.writeUInt32BE(config.packet.totalLength + config.packet.typeLength + messageBuffer.length,0);

    const typeBuffer = Buffer.alloc(config.packet.typeLength);
    typeBuffer.writeUInt8(1,0);
    
    const responsePacket = Buffer.concat([lengthBuffer, typeBuffer, messageBuffer]);
    socket.write(responsePacket);
}
  1. 처음 데이터를 받을 때 socket, id, payload 등을 받는 방식이 각각의 원소로 받기로 했는지, 괄호를 씌웠는지를 잘 확인하자.
  2. 직렬화를 할 때 proto 파일 내부의 순서와 데이터 타입을 잘 확인해 보도록 하자.
  3. 데이터를 보낼 때 bytes 형태의 데이터는 json을 보내면 데이터를 제대로 인식하지 못한다. 일단 string 형태로 보낼 수 있으면 그렇게 하는 걸 해보도록 하자.

남은 할 일

일단 최대의 고비는 넘겼으니 이제 이동 동기화 등을 하도록 하자.

태그:

카테고리:

업데이트: