SGame 多种语言接入

这篇博客详细介绍了如何使用SGAME提供的GO、C、JAVA三种语言的库文件进行服务器连接,包括封装的API接口及客户端示例,强调了在测试时关闭connect_serv的zlib_on选项,并给出了各语言客户端的编译和运行步骤。
摘要由CSDN通过智能技术生成

多语言接入

  • 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 {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值