배치파일을 세팅한다.
// GenPackets.bat
Rem Path Setting
pushd %~dp0
protoc -I=./ --cpp_out=./ ./Enum.proto
protoc -I=./ --cpp_out=./ ./Struct.proto
protoc -I=./ --cpp_out=./ ./Protocol.proto
Rem Error -> Pause cmd
IF ERRORLEVEL 1 PAUSE
Rem Excute bat -> Make file -> Copy with folder
XCOPY /Y Enum.pb.h "../../../GameServer"
XCOPY /Y Enum.pb.cc "../../../GameServer"
XCOPY /Y Struct.pb.h "../../../GameServer"
XCOPY /Y Struct.pb.cc "../../../GameServer"
XCOPY /Y Protocol.pb.h "../../../GameServer"
XCOPY /Y Protocol.pb.cc "../../../GameServer"
XCOPY /Y Enum.pb.h "../../../DummyClient"
XCOPY /Y Enum.pb.cc "../../../DummyClient"
XCOPY /Y Struct.pb.h "../../../DummyClient"
XCOPY /Y Struct.pb.cc "../../../DummyClient"
XCOPY /Y Protocol.pb.h "../../../DummyClient"
XCOPY /Y Protocol.pb.cc "../../../DummyClient"
배치파일을 실행하면 명령어로 해당 폴더에 생성된 파일이 복사가 되지만, VS에는 드래그해서 사용해야한다.
proto 파일은 다른 파일을 import 할 수 있다.
같은 packge(namespace)를 공유할 수 있다.
// Protocol.proto
syntax = "proto3"; // version
package Protocol; // namespace
import "Enum.proto";
import "Struct.proto";
message S_TEST
{
uint64 id = 1; // = 1 -> 첫 번째 위치. 초기값 아님
uint32 hp = 2;
uint32 attack = 3;
repeated BuffData buffs = 4; // repeated -> 가변데이터
}
생성된 cc파일의 pch는 항상 사용안함으로 체크해야한다.
빌드시 배치파일 자동 실행 자동화
먼저 명령어를 입력하기 편하게 폴더명을 바꾸었다.
1. 빌드 이벤트 추가
CALL $(SolutionDir)Common\Protobuf\bin\GenPackets.bat
수정사항이 없으면 빌드이벤트는 일어나지 않는다.
프로젝트에서 사용하고 있는 proto 파일은 빌드에 영향을 주지 않는다.
다른 폴더에 위치한 파일을 IDE에서 문서편집기로만 사용하고 있는 형태이다.
따라서 현재 proto 파일을 수정하더라도 빌드이벤트가 일어나지 않아 배치파일이 실행되지 않는다.
2. 빌드 이벤트 상시 활성화
- VS를 종료한다
- vcxproj 파일을 문서 편집기로 실행한다.
<ItemGroup><None ~~ => 부분을 복사하여 추가한다. bat파일은 뺀다.
<UpToDateCheckInput Include="~~~" />
enum 활용하기
// Protocol.proto
syntax = "proto3"; // version
package Protocol; // namespace
message S_TEST
{
enum PacketId { NONE = 0 ; PACKET_ID = 1; }
}
message S_LOGIN
{
enum PacketId { NONE = 0; PACKET_ID = 2; }
}
#include "Protocol.pb.h"
int main()
{
auto id = Protocol::S_TEST::PACKET_ID;
}
enum을 위 방식처럼 활용할 수 있지만 직접 수기로 수정하고 등록하는 필요가 있기 때문에 추천되는 방법은 아니다.
'Server > C++' 카테고리의 다른 글
C++ MySQL 연동 - Connector/C++ (0) | 2024.08.30 |
---|---|
Google Protobuf - 4) 자동화 - 2 (0) | 2024.08.21 |
Google Protobuf - 2) 패킷 송수신 (0) | 2024.08.21 |
Google Protobuf - 1) 21.3 설치 (0) | 2024.08.20 |
패킷 직렬화 (Packet Serialization) - 데이터의 사용 (0) | 2024.08.20 |