protobuf를 불러와서 값을 사용하려고 할 때,
export const loadProtos = async () => {
try {
const root = new protobuf.Root();
await Promise.all(protoFiles.map((file) => root.load(file)));
// packetNames에 미리 정리한 패킷들을 가져와 매핑
for (const [namespace, types] of Object.entries(packetNames)) {
protoMessages[namespace] = {};
for (const [type, typeName] of Object.entries(types)) {
protoMessages[namespace][type] = root.lookup(typeName);
}
//root.lookupEnum
}
console.log('protobuf 파일 로드 완료.');
} catch (e) {
console.error(`protobuf 파일 로드 중 오류가 발생했습니다. ${e}`);
}
};
loadProtos 함수를 통해 protobuf 파일들을 다 불러온 후,
enum GlobalFailCode {
NONE_FAILCODE = 0;
UNKNOWN_ERROR = 1;
INVALID_REQUEST = 2;
AUTHENTICATION_FAILED = 3;
CREATE_ROOM_FAILED = 4;
JOIN_ROOM_FAILED = 5;
LEAVE_ROOM_FAILED = 6;
REGISTER_FAILED = 7;
ROOM_NOT_FOUND = 8;
CHARACTER_NOT_FOUND = 9;
CHARACTER_STATE_ERROR = 10;
CHARACTER_NO_CARD = 11;
INVALID_ROOM_STATE = 12;
NOT_ROOM_OWNER = 13;
ALREADY_USED_BBANG = 14;
INVALID_PHASE = 15;
CHARACTER_CONTAINED = 16;
}
enum GlobalFailCode를 불러와 클라이언트에게 패킷을 보낼 때 사용하였는데,
failCode : protoMessages.enum.GlobalFailCode.AUTHENTICATION_FAILED
failCode의 값이 undefined로 뜨는 문제가 발생했다!
그래서 찍어본 console.log(protoMessages.enum.GlobalFailCode)에서
GlobalFailCode 안에 values로 값이 감싸져 있는 것을 발견했다!
그리하여
export const getFailCode = () => {
const protoMessages = getProtoMessages();
return protoMessages.enum.GlobalFailCode.values;
};
getFailCode() 함수를 만들어 GlobalFailCode.values에 있는 값들을 가져오도록 작성해 주었고 그렇게 완성된 코드의 형태는
const failCode = getFailCode();
failCode: failCode.JOIN_ROOM_FAILED
이러한 형태로 반들어주니 잘 작동하는 것을 확인해 주었다!
message와 다르게 enum으로 선언된 protobuf 값은 직접 들고 올 수 없다!