golang (네트웍) 프로토콜 생성기
By SeukWon Kang
https://github.com/kasworld/genprotocol
genprotocol - protocol 기반 코드 생성
( goguelike 프로젝트를 하면서 만들어진 ) 네트웍 등에서 사용하기 위한 protocol 을 작성하는데 필요한 반복적 이고 기계적인 코드들을 자동으로 생성 해주는 프로그램 입니다. https://github.com/kasworld/wasmwebsocket 을 보면 예제를 볼 수 있습니다. 작성 이유는 하나의 프로젝트에서 여러종의 protocol 을 사용할 일이 생겨서 반복된 코드를 작성하다 보니 만들게 되었습니다. goguelike 를 예로 들면 game client - tower server tower server - ground server 의 2종의 protocol이 필요하고 사실상 비슷한데 조금 다른 코드들이 서로 구별 되어 쓰입니다.
<a
href=“https://github.com/kasworld/genprotocol#%EC%82%AC%EC%9A%A9-%EB%B2%95" id=“user-content-사용-법” class=“anchor” aria-hidden=“true”>
사용 법
위 와 같은 경우 genprotocol -ver=1.0 -prefix=c2t -basedir=. 과 같은 형태로 실행합니다.
<a
href=“https://github.com/kasworld/genprotocol#%EC%9D%B8%EC%9E%90-%EC%84%A4%EB%AA%85" id=“user-content-인자-설명” class=“anchor” aria-hidden=“true”>
인자 설명
ver : protocol의 version ( protocol 마다 버전이 다를 수 있습니다. ) prefix : 각 protocol을 구별하기 위한 prefix basedir : protocol code가 생성될 기본 dir
<a
href=“https://github.com/kasworld/genprotocol#%EC%83%9D%EC%84%B1%EB%90%98%EB%8A%94-go-package-%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC" id=“user-content-생성되는-go-package-디렉토리” class=“anchor” aria-hidden=“true”>
생성되는 go package (디렉토리)
prefix 는 genprotocol 에 prefix 인자로 준 값 생성이 끝난 코드들은 import code가 제대로 되어 있지 않으니 goimports 등으로 정리 해주어야 합니다. 실행하면 goimports 를 해야할 파일 목록을 찍어 줍니다.
example.sh 를 실행한 결과
goimports -w example/c2s_version/version_gen.go
goimports -w example/c2s_idcmd/command_gen.go
goimports -w example/c2s_idnoti/noti_gen.go
goimports -w example/c2s_error/error_gen.go
goimports -w example/c2s_packet/packet_gen.go
goimports -w example/c2s_obj/objtemplate_gen.go
goimports -w example/c2s_msgp/serialize_gen.go
goimports -w example/c2s_json/serialize_gen.go
goimports -w example/c2s_client/recvrspobjfnmap_gen.go
goimports -w example/c2s_client/recvnotiobjfnmap_gen.go
goimports -w example/c2s_client/callsendrecv_gen.go
goimports -w example/c2s_server/demuxreq2api_gen.go
goimports -w example/c2s_server/apitemplate_gen.go