41 lines
1020 B
Go
41 lines
1020 B
Go
package com
|
|
|
|
import (
|
|
"reflect"
|
|
|
|
"mongo.games.com/goserver/core/logger"
|
|
"mongo.games.com/goserver/core/netlib"
|
|
|
|
"mongo.games.com/game/common"
|
|
rankproto "mongo.games.com/game/protocol/rank"
|
|
)
|
|
|
|
func Register(mainId int, msgType interface{}, h func(s *netlib.Session, g *rankproto.GateTransmit, packetId int, data interface{}, sid int64) error) {
|
|
f := func() interface{} {
|
|
tp := reflect.TypeOf(msgType)
|
|
if tp.Kind() == reflect.Ptr {
|
|
tp = tp.Elem()
|
|
}
|
|
return reflect.New(tp).Interface()
|
|
}
|
|
|
|
common.Register(mainId, rankproto.GateTransmit{}, func(s *netlib.Session, packetId int, data interface{}, sid int64) error {
|
|
d, ok := data.(*rankproto.GateTransmit)
|
|
if !ok {
|
|
return nil
|
|
}
|
|
|
|
msg := f()
|
|
if err := netlib.UnmarshalPacketNoPackId(d.GetPacketData(), msg); err != nil {
|
|
logger.Logger.Errorf("PacketId %v Unmarshal error: %v", mainId, err)
|
|
return err
|
|
}
|
|
|
|
if d == nil || d.Platform == "" || d.Platform == "0" || d.Snid == 0 {
|
|
return nil
|
|
}
|
|
|
|
return h(s, d, packetId, msg, sid)
|
|
})
|
|
}
|