rabbit97 님의 블로그
15일 일지 본문
오늘의 회의 내용
# 추가 기능 구현 사항을 구체적으로 어떻게 적용할껀지
-
- 속도 조절
- Shift 키를 누르면 캐릭터 속도가 빨라지며, 이 상태에서 일정 시간이 지나면 일반 속도보다 느려진다. (일반: 3, 빠름: 5, 느림: 2) (현재 클라이언트 쪽에 추가로 구현되었고, UI 쪽을 추가하여 유저가 보기 쉽게 변경할 수 있도록 고려 중…) (서버 쪽에서도 검증하는 작업이 필요할 것으로 보임)
- 카드 추가
- 백병전 상대한테 빵야가 있을 시, 내 HP 1 감소, 없을 시, 상대는 2 감소 심리전으로 사용할 수 있지 않을까?
- 프렌드 쉴드 내가 맞은 빵야를 다른 사람이 맞도록…
- 폭탄 해제
- 함정 나에게 빵야 한 사람이 오히려 HP가 깎이는 것
- 데일리 미션 서로 안 죽이는 이벤트 쪽으로… 예를 들어, 특정 물건을 빈 건물에다가 두기, 길거리의 쓰레기/몬스터 치우기? 아니면 맵에 있는 가로등 다 키기 vs 끄기…
- 편의 기능? 끊어져 있는 길들이 서로 연결되도록… 즉, 막다른 길로 쭉 가면 자연스레 반대 쪽에서 나올 수 있도록,,, 통로 별로 포탈 느낌의 무언가를 추가 해야할 듯….
진행 상황
# 스켈레톤 코드 작성 중 onData 파일에서 알 수 없는 문제 발생
import CustomError from './../utils/errors/customError.js';
import ErrorCodes from './../utils/errors/errorCodes.js';
import config from './../config/config.js';
import validateSequence from './../utils/socket/sequence.js';
import packetParser from './../utils/packet/parser/packetParser.js';
import { getHandlerByPacketType } from './../handlers/index.js';
import handleError from './../utils/errors/errorHandler.js';
const onData = (socket) => async (data) => {
if (!socket) {
throw new CustomError(ErrorCodes.SOCKET_ERROR, `소켓을 찾을 수 없거나 연결이 끊겼다.`);
}
socket.buffer = Buffer.concat([socket.buffer, data]);
const totalHeaderLength = config.packet.totalHeaderLength;
while (socket.buffer.length >= totalHeaderLength) {
// 1. 패킷 타입 길이만큼 버퍼 읽을 위치 지정
let offset = 0;
// 2. 패킷 타입 - 핸들러 (2 bytes)
const packetType = socket.buffer.readUInt16LE(offset);
offset += config.packet.payloadOneofCaseLength; // 2
// 3. 클라이언트 버전 길이 (1 byte)
const versionLength = socket.buffer.readUInt8(offset);
offset += config.packet.versionLength; // 1
// 4. 클라이언트 버전 (versionLength bytes)
const version = socket.buffer.subarray(offset, offset + versionLength).toString('utf-8');
offset += versionLength;
// 4-1. 버전이 일치하는지 검증
if (version !== config.client.version) {
throw new CustomError(
ErrorCodes.CLIENT_VERSION_MISMATCH,
'클라이언트 버전이 일치하지 않습니다.',
);
}
// 5. 패킷 시퀀스 (4 bytes)
const sequence = socket.buffer.readUInt32LE(offset);
offset += config.packet.sequenceLength;
const isValidSequence = validateSequence(socket, sequence);
if (!isValidSequence) {
throw (
(new CustomError(ErrorCodes.INVALID_SEQUENCE),
`패킷이 중복되거나 누락되었다: 예상 시퀀스: ${socket.sequence + 1}, 받은 시퀀스: ${sequence}`)
);
}
// 6. 페이로드 길이 (4 bytes)
const payloadLength = socket.buffer.readUInt32LE(offset);
offset += config.packet.payloadLength;
if (socket.buffer.length >= payloadLength + totalHeaderLength) {
// 7. 페이로드 (payloadLength bytes)
const payloadBuffer = socket.buffer.subarray(offset, offset + payloadLength);
try {
const { payload } = packetParser(payloadBuffer);
socket.buffer = socket.buffer.subarray(offset + payloadLength);
const handler = getHandlerByPacketType(packetType);
await handler({ socket, payload });
break;
} catch (error) {
handleError(socket, error);
break;
}
}
}
};
export default onData;
5번. validateSequence() 쪽에서 패킷 누락
이유 확인 불가 주말동안 해결하고 월요일에 개발 시작할 수 있도록 하기
'프로젝트 Final' 카테고리의 다른 글
19일 일지 (0) | 2024.11.19 |
---|---|
18일 일지 (0) | 2024.11.18 |
14일 일지 (0) | 2024.11.14 |
13일 일지 (2) | 2024.11.13 |
최종 프로젝트 시작 (1) | 2024.11.13 |