多语言接入
-
sgame/lib/net/ 目录里提供了与SGAME连接服务器的协议封装库文件,目前包括GO,C,JAVA三种,主要是对符合SGAME传输协议的数据进行打解包操作
- net_pkg.go 以GO进行封装的API接口
- net_pkg.c.api 以C封装的API接口,使用时需重命名为net_pkg.c
- net_pkg.java.api 以JAVA封装的API接口,使用时需重命名为net_pkg.java
-
sgame/client/ 目录提供了上述几种语言编写的简单客户端,用于具体数据的打解包演示和连接测试,具体见下
基本说明
-
测试时需要关闭connect_serv的字符串压缩zlib_on选项,这样可以方便直接处理json字串。配置文件位于connect_serv文件所在目录的conf/connect_serv.json:
.... "zlib_on":0, ....
然后重新拉起connect_serv或者直接重新加载配置即可
-
使用请求的协议为PING协议,请求的json字符串为结构为:
{"proto":1 , "sub":{"ts":xxx}}
,具体的结构可以参见sgame/proto/cs/api.go和ping.proto.go
Using Go
API位于sgame/lib/net/net_pkg.go
-
主要API
- PackPkg 将有效数据打包为SGAME服务器使用的传输数据包
/* Pack pkg_data to pkg. @pkg_option: ==0 normal pkg. > 0 PKG_OP_XX means special pkg to server @return: -1:failed -2:buff_len not enough >0:success(pkg_len) */ func PackPkg(pkg_buff []byte, pkg_data []byte, pkg_option uint8) int
- UnPackPkg 将服务器收到的传输包解出有效数据
/* UnPackPkg from raw data @return:(pkg_tag , pkg_data , pkg_len) @pkg_tag 0xFF:error , 0:data not ready , else:success and valid tag of pkg if tag is valid then will return valid pkg_data and pkg_len */ func UnPackPkg(raw []byte) (uint8, []byte, int)
GO的简单客户端文件位于sgame/client/simple_cli.go,主要的使用步骤如下:
-
主要步骤
- 构造请求串
//Encode cmd cmd = fmt.Sprintf("{\"proto\":1 , \"sub\":{\"ts\":%d}}" , curr_ts); enc_data := []byte(cmd);
- 使用API打包
//Pack pkg_len := lnet.PackPkg(pkg_buff, enc_data, 0) if pkg_len < 0 { fmt.Printf("pack failed!\n") return }
- 发送给connect_serv
//send _, err = conn.Write(pkg_buff[:pkg_len]) if err != nil {