1 분 소요

패킷을 보내고 받는 방법 자체를 아직도 제대로 이해를 못했는지 현재 initPacket을 받는 부분까지만 성공했다. 어느 부분에서 실패했고 왜 실패했는지를 분석해보자.

  1. initpacket의 분석
export const Init = ({socket, id, payload}) => {
    const protos = getProtoMessages();
    const packet = protos.init.InitialPayload;
    const newbuff = Buffer.from(payload);
    const decodedpacket = packet.decode(newbuff);
    console.log(decodedpacket);

    const playerId = decodedpacket.playerId;

    
    let userCreate = addUser(playerId, socket);

    console.log("1이면 유저가 생성되었다고 0이면 이미 있음", userCreate);

    

    let user = getUserById(playerId);
    if(!user)
    {
        console.log("유저 없음");
    }
    else
    {
        user.getLatancy(decodedpacket.latency)
    }




    const response = protos.response.Response;
    const message = response.create({handlerId : userCreate === 1 ? 0 : 1, responseCode : userCreate === 1 ? 0 : 1, timestamp : Date.now(), data : Buffer.from(JSON.stringify({status : "ok"}))});
    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);
}

일단 클라이언트 쪽에서 계속 initPacket을 보내는 것은 확인했다. 저 족에선 response를 받는다는 것을 확인하여 데이터 형태를 변형했다.
생각 하기에는 여기서 데이터를 보낸다면 이후에 location 패킷이 와야 하는데 그게 오지 않고 init 패킷만 계속 발생하고 있다는 문제가 있다.
가장 큰 문제는 패킷을 보내고 나서 계속 오류가 발생하는지를 못 찾겠다는 것이다. 일주일 내내 이것 해결만 하다가 끝나 버렸다.
이번 과제는 해결하지 못했고, 어떤 식으로 작업해야 하는지 확인해봐야 할 것 같다.

태그:

카테고리:

업데이트: