Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kasworld/genprotocol
generate protocol code
https://github.com/kasworld/genprotocol
authorization golang golang-sdk json metaprogramming msgpack network-programming protocol webassembly websocket
Last synced: about 2 months ago
JSON representation
generate protocol code
- Host: GitHub
- URL: https://github.com/kasworld/genprotocol
- Owner: kasworld
- License: apache-2.0
- Created: 2019-10-09T02:34:27.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2021-03-21T03:38:13.000Z (almost 4 years ago)
- Last Synced: 2023-07-10T07:47:52.026Z (over 1 year ago)
- Topics: authorization, golang, golang-sdk, json, metaprogramming, msgpack, network-programming, protocol, webassembly, websocket
- Language: Go
- Homepage:
- Size: 252 KB
- Stars: 3
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# genprotocol - protocol 기반 코드 생성
( goguelike 프로젝트를 하면서 만들어진 )
네트웍 등에서 사용하기 위한 protocol 을 작성하는데 필요한 반복적 이고 기계적인 코드들을 자동으로 생성 해주는 프로그램 입니다.example folder 에서 예제를 볼 수 있습니다.
작성 이유는 하나의 프로젝트에서 여러종의 protocol 을 사용할 일이 생겨서
반복된 코드를 작성하다 보니 만들게 되었습니다.goguelike 를 예로 들면
game client - tower server
tower server - ground server
의 2종의 protocol이 필요하고 사실상 비슷한데 조금 다른 코드들이 서로 구별 되어 쓰입니다.
## 사용 법
위 와 같은 경우genprotocol -ver=1.2 -prefix=c2t -basedir=.
genprotocol -ver=1.0 -prefix=t2g -basedir=.
과 같은 형태로 실행합니다.
자동 생성된 파일은 모두 _gen.go 로 끝나는 이름을 가집니다.
### 인자 설명
ver : protocol의 version ( protocol 마다 버전이 다를 수 있습니다. )
prefix : 각 protocol을 구별하기 위한 prefix
basedir : protocol code가 생성될 기본 폴더, 여기서 prefix_*.enum 을 읽습니다.
## example/rundriver 디렉토리
json을 serializer로 사용하는
tcp server/client,
websocket server/client
예제 입니다.## genprotocol에서 읽어 들이는 파일들
인자로준 basedir 폴더내에서 찾습니다.
각 라인의 첫 단어가 enum 이고 space 로 분리된 뒷 부분은 생성된 코드의 comment가 된다.
# 으로 시작하는 라인은 무시(comment취급)
prefix_command.enum : request/response packet 용 command id 목록
prefix_noti.enum : notification packet 용 noti id 목록
prefix_error.enum : error code 목록## 생성되는 go package (디렉토리)
prefix 는 genprotocol 에 prefix 인자로 준 값
생성이 끝난 코드들은 import code가 제대로 되어 있지 않으니
goimports 등으로 정리 해주어야 합니다.-verbose 인자를 주고 실행하면 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_const/const_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_handlersp/fnobjtemplate_gen.go
goimports -w example/c2s_handlersp/fnbytestemplate_gen.go
goimports -w example/c2s_handlenoti/fnobjtemplate_gen.go
goimports -w example/c2s_handlenoti/fnbytestemplate_gen.go
goimports -w example/c2s_handlereq/fnobjtemplate_gen.go
goimports -w example/c2s_handlereq/fnbytestemplate_gen.go
goimports -w example/c2s_serveconnbyte/serveconnbyte_gen.go
goimports -w example/c2s_connbytemanager/connbytemanager_gen.go
goimports -w example/c2s_conntcp/conntcp_gen.go
goimports -w example/c2s_connwasm/connwasm_gen.go
goimports -w example/c2s_connwsgorilla/connwsgorilla_gen.go
goimports -w example/c2s_loopwsgorilla/loopwsgorilla_gen.go
goimports -w example/c2s_looptcp/looptcp_gen.go
goimports -w example/c2s_pid2rspfn/pid2rspfn_gen.go
goimports -w example/c2s_statnoti/statnoti_gen.go
goimports -w example/c2s_statcallapi/statcallapi_gen.go
goimports -w example/c2s_statserveapi/statserveapi_gen.go
goimports -w example/c2s_statapierror/statapierror_gen.go
goimports -w example/c2s_authorize/authorize_gen.go인자로 -statstype=elementtype 이 주어진 경우 추가로 생성
goimports -w example/c2s_error_stats/c2s_error_stats_gen.go
goimports -w example/c2s_idcmd_stats/c2s_idcmd_stats_gen.go
goimports -w example/c2s_idnoti_stats/c2s_idnoti_stats_gen.goprefix_obj : protocol struct 들 (packet body)
생성하는 파일
objtemplate_gen.go : 예제 파일 - 참고해서 "_gen"이 없는 파일을 만들것prefix_handlereq : commandid -> api function map, 과 예제 api function들
생성하는 파일
fnbytestemplate_gen : packetbody 가 []byte 인 형태로 api로 demux, unmarshal을 api 쪽에서 해야 함
fntemplate_gen : packetbody 가 interface{} 인 형태로 api로 demux, unmarshal 후에 demux map을 호출 해야 함.prefix_version : protocol version 정보
생성하는 파일
version_gen.goprefix_error : protocol error code list, errorcode type은 error를 구현하고 있다.
생성하는 파일
error_gen.goprefix_idcmd : protocol command (request,response) list
생성하는 파일
command_gen.goprefix_idnoti : protocol notification list
생성하는 파일
noti_gen.goprefix_const : 각종 상수들 , 설정의 변경이 가능하도록 모아둠.
생성하는 파일
const_gen.go : 복사해서 _gen 이 없는 파일을 만들고 comment를 풀어 사용할것.prefix_packet : protocol packet( header + body )
생성하는 파일
packet_gen.goprefix_msgp : messagepack marshal/unmarshal code (https://github.com/tinylib/msgp)
생성하는 파일
serialize_gen.go
prefix_json : json marshal/unmarshal code생성하는 파일
serialize_gen.goprefix_gob : gob marshal/unmarshal code
생성하는 파일
serialize_gen.goprefix_loopwsgorilla : go server/client용 gorilla websocket Send/Recv loop ([gorilla](http://www.gorillatoolkit.org/pkg/websocket))
생성하는 파일
loopwsgorilla_gen.goprefix_looptcp : go server/client용 TCP Send/Recv loop
생성하는 파일
looptcp_gen.goprefix_serveconnbyte : server 용 connection api 처리 (tcp, websocket) packet body []byte 형태
생성하는 파일
serveconnbyte_gen.goprefix_connbytemanager : server 용 connection manager, server에 연결된 connection(prefix_serveconnbyte) 을 관리한다.
생성하는 파일
connbytemanager_gen.goprefix_connwasm : websocket wasm client 용 connection
생성하는 파일
connwasm_gen.goprefix_connwsgorilla : gorilla websocket client 용 connection
생성하는 파일
connwsgorilla_gen.goprefix_conntcp : tcp client 용 connection
생성하는 파일
conntcp_gen.goprefix_handlersp : response 를 받아서 처리
생성하는 파일
recvrspobjfnmap_gen.go : 받은 response 처리prefix_handlenoti : notification을 받아서 처리
생성하는 파일
recvnotiobjfnmap_gen.go : 받은 notification 처리prefix_pid2rspfn : callback 형태로 request/response를 처리하기위한 lib(client example참조)
생성하는 파일
pid2rspfn_gen.goprefix_statnoti : notification protocol 통계
생성하는 파일
statnoti_gen.goprefix_statcallapi : client api call 통계
생성하는 파일
statcallapi_gen.goprefix_statserveapi : server api 처리 통계
생성하는 파일
statserveapi_gen.goprefix_statapierror : api 결과 error 통계
생성하는 파일
statapierror_gen.goprefix_authorize : client api call의 권한 관리 (commandid 기준)
생성하는 파일
authorize_gen.go## 인자로 -statstype=elementtype 이 주어진 경우 추가로 생성하는 패키지
prefix_error_stats : elementtype을 구성요소로한 simple errorcode 통계 (genenum에서 가져옴)
생성하는 파일
prefix_error_stats_gen.goprefix_idcmd_stats : elementtype을 구성요소로한 simple commandid 통계 (genenum에서 가져옴)
생성하는 파일
prefix_idcmd_stats_gen.goprefix_idnoti_stats : elementtype을 구성요소로한 simple notiid 통계 (genenum에서 가져옴)
생성하는 파일
prefix_idnoti_stats_gen.go## websocket 을 사용하려면
go get github.com/gorilla/websocket