클라에서 서버로 들어오는 패킷 처리 구조
export const onData = (socket) => async (data) => {
socket.buffer = Buffer.concat([socket.buffer, data]);
const totalHeaderLength = config.packet.totalLength + config.packet.typeLength;
while (socket.buffer.length >= totalHeaderLength) {
const length = socket.buffer.readUInt32BE(0);
const packetType = socket.buffer.readUInt8(config.packet.totalLength);
if (socket.buffer.length >= length) {
const packet = socket.buffer.slice(totalHeaderLength, length);
socket.buffer = socket.buffer.slice(length);
try {
switch (packetType) {
case PACKET_TYPE.NORMAL:
const { handlerId, userId, payload } = packetParser(packet);
const handler = getHandlerById(handlerId);
await handler({ socket, userId, payload });
}
} catch (error) {
handleError(socket, error);
}
} else {
// 아직 전체 패킷이 도착하지 않음
break;
}
}
};

핸들러 처리 로직

'TIL' 카테고리의 다른 글
| [240715 TIL] 게임 서버 멀티플레이 타워 디펜스 프로젝트 2 (0) | 2024.07.15 |
|---|---|
| [240712 TIL] 게임 서버 멀티플레이 타워 디펜스 프로젝트 1 (0) | 2024.07.12 |
| [240708 TIL] 게임 서버 주특기 플러스 개인 과제 1일차 (0) | 2024.07.08 |
| [240705 TIL] 게임 서버 주특기 플러스 강의 3일차(cmd에서 db 생성) (0) | 2024.07.05 |
| [240703 TIL] 게임 서버 주특기 플러스 강의 2일차 (0) | 2024.07.03 |