Skip to content

shujunqiao/goproto

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

goproto

用Go语言实现的一个协议生成器 可以用GO语言的语法来定义协议,然后用该程序就可以输出为包含序列化和反序列化的代码。

生成出的序列化代码非常简单,没有做什么向前还是向后的兼容,只是根据当时自己项目的需要所写的一个工具。 这份代码只包含了解析和生成部分的代码,以及给出了ReadStream/WriteStream接口的实现。 解析和生成部分的代码可以作为一份参考,即如何使用go自带的parser来扩展自己的代码。 协议定义文件主要是通过注释标识出哪些结构体是信令,以及是何种格式的信令及其信令ID的名称及ID值。

信令的种类主要有三种:

  • 简单信令,即只有信令头的结构体,自身不含有任何字段。
  • 普通信令,即内部有字段的结构体
  • 信令数组,即该信令是一个切片类型

信令种类标识方式: 在结构体上方添加注释,格式如下: :, PacketType按照上面的种类对应如下:

  • @SimplePacket,表示简单信令
  • @Packet, 表示普通信令
  • @VLFPacket, 表示信令数组

PacketIDName用于为PacketIDValue分配的名称 PacketIDValue表示该信令的ID

下面是一个简单的例子

package protocol

// @SimplePacket: KEEPALIVE_REQUEST, 0x00000001
type KeepaliveRequest struct {}

// @SimplePacket:KEEPALIVE_RESPONSE, 0x80000001
type KeepaliveResponse struct {}

// @Packet: LOGIN_REQUEST, 0x00000002
type LoginRequest struct {
    UserName string
    Password string    
}

// @Packet: LOGIN_RESPONSE, 0x80000002
type LoginResponse struct {
    Ack uint32
    SessionID uint64
}

// @Packet: QUERY_BUDDYLIST_REQUEST, 0x00000003
type QueryBuddyListRequest struct {
    SessionID uint64
}

type BuddyInfo struct {
    NickName string
    Age uint32
    Male uint32
    Address string
}

// @VLFPacket: QUERY_BUDDYLIST_RESPONSE, 0x80000003
type QueryBuddyListResponse struct {
    Infos []BuddyInfo
}

About

A protocol generator written by Golang

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages