지난번에 proto파일을 파싱해서 ClientPacketHandler.h 을 만드는 파이썬 프로그램을 만들었다.

자동화를해서 편하긴 한데 여전히 쉘스크립트를 직접 실행시켜줘야하는 번거로움이 있다.

그러니 이번엔 proto파일들을 수정하면 GenPacket으로 새로운 proto파일 기반의 HandlePacket 헤더들을 만들고, 그것들을 인증서버, 더미클라이언트 소스코드 폴더로 자동으로 넣어주도록 만들자. 


패킷 자동화 파일들 한눈에 보기

현재의 Protocol과 GenPacket 파이썬파일들의 디렉토리 구조는 아래와 같다.

쉘스크립트를 쓰는데 경로 신경쓰기가 짜증나서 그냥 Protocol로 복사해서 사용중이다. GenPacket을 바꿀 일은 거의 없을거 같으니 굳이 저것까지 의존성에 포함시킬 필요는 없을 것 같기도 하고.

Project/
├── Protocol
│   ├── GenPackets (복사본)
│   ├── MakePackets.sh
│   ├── Protocol.proto
│   └── Templates
│       └── PacketHeader.h
└── Tools
    ├── GenPacketMaker.sh
    ├── GenPackets (원본)
    ├── PacketGenerator.py
    └── PacketGenerator.py

MakePackets.sh

나중에 proto파일들이 늘어나면 수정해야할 예정.

set -e는 쉘스크립트 내 명령어가 실패하면 스크립트를 중단하고 실패한 명령어의 에러코드를 리턴하게 한다.

이걸 안써놓으면 Makefile 도중에 이 쉘스크립트가 실패해도 Makefile이 계속 진행되는 문제가 있기때문에 넣어줘야한다.

set -e
cd "$(dirname "$0")"

protoc --cpp_out=. Protocol.proto

./GenPackets --path=./Protocol.proto --output=ClientPacketHandler --recv=C_ --send=S_
./GenPackets --path=./Protocol.proto --output=ServerPacketHandler --recv=S_ --send=C_

cp Protocol.pb.cc Protocol.pb.h ../AuthServer
mv ClientPacketHandler.h ../AuthServer

cp Protocol.pb.cc Protocol.pb.h ../DummyClient
mv ServerPacketHandler.h ../DummyClient

 


proto 파일을 Makefile 빌드 의존성에 추가하기

 

proto파일을 기반으로 디렉토리나 파일명을 설정한 다음

이전에는 pb.cc파일들을 하나하나 인증서버와 더미클라에 써줬는데 $(PROTO_CC_FILES) 로 통째로 넣어주자.

proto 타겟도 추가한 뒤에, auth, cli에 의존성으로 proto를 추가해준다.

#======= PacketHandler ========#
PROTO_DIR = Protocol
PROTO_FILES_NAME = Protocol.proto
PROTO_FILES = $(addprefix $(PROTO_DIR)/, $(PROTO_FILES_NAME))
PROTO_CC = $(PROTO_FILES:.proto=.pb.cc)
PROTO_CC_FILES = $(notdir $(PROTO_CC))
PROTO_H = $(PROTO_FILES:.proto=.pb.h)
#======= PacketHandler ========#

#======= AuthServer ========#
AUTH_SERVER_DIR = AuthServer
AUTH_SERVER_EXE = test
AUTH_SERVER_SRC_FILE = AuthServer.cpp \
	CAuthSession.cpp \
	ClientPacketHandler.cpp \
	$(PROTO_CC_FILES)

# ... #

#======= AuthServer ========#
auth : proto $(AUTH_SERVER_EXE)

# ... #

#======= PacketHandler ========#
proto : $(PROTO_CC) $(PROTO_H)

$(PROTO_CC) $(PROTO_H) : $(PROTO_FILES)
	bash ./Protocol/MakePackets.sh
#======= PacketHandler ========#

# ... #

이제 proto 파일을 변경하면 프로토파일에 의존하는 파일들만 다시 컴파일된다. 

'프로젝트 > Project_Island' 카테고리의 다른 글

17. Session, EpollEvent 포인터 참조 문제 해결  (0) 2026.03.09
16. RedisConnection  (0) 2026.03.08
14. 패킷 자동화 (1)  (0) 2026.03.08
13. DummyClient <-> AuthServer 통신  (0) 2026.03.07
12. DummyClient (2)  (0) 2026.03.06

+ Recent posts