2 Star 3 Fork 2

結城明日奈 / cellnet

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
handler_decode.go 1014 Bytes
一键复制 编辑 原始数据 按行查看 历史
黑色灵猫 提交于 2017-07-26 22:45 . 更新: 根据goreport标准调整
package cellnet
import (
"errors"
"reflect"
)
type DecodePacketHandler struct {
}
func (self *DecodePacketHandler) Call(ev *Event) {
var err error
ev.Msg, err = DecodeMessage(ev.MsgID, ev.Data)
r := errToResult(err)
if r != Result_OK {
ev.Msg, _ = DecodeMessage(ev.MsgID, ev.Data)
ev.SetResult(r)
}
}
var defaultDecodePacketHandler = new(DecodePacketHandler)
func StaticDecodePacketHandler() EventHandler {
return defaultDecodePacketHandler
}
var ErrCodecNotFound = errors.New("codec not found")
func DecodeMessage(msgid uint32, data []byte) (interface{}, error) {
meta := MessageMetaByID(msgid)
if meta == nil {
return nil, ErrMessageNotFound
}
if meta.Codec == nil {
return nil, ErrCodecNotFound
}
// 创建消息
msg := reflect.New(meta.Type).Interface()
// 解析消息
err := meta.Codec.Decode(data, msg)
if err != nil {
return nil, err
}
return msg, nil
}
func errToResult(err error) Result {
if err == nil {
return Result_OK
}
return Result_CodecError
}
1
https://gitee.com/gesneriana/cellnet.git
git@gitee.com:gesneriana/cellnet.git
gesneriana
cellnet
cellnet
master

搜索帮助