// 将PB消息解析封装到闭包中 func RegisterMessage(disp *PacketDispatcher, msgIns interface{}, userHandler func(cellnet.CellID, interface{})) { msgType := reflect.TypeOf(msgIns) msgName := msgType.String() msgID := cellnet.Name2ID(msgName) // 将消息注册到mapper中, 提供反射用 addMapper(msgName, msgID) //log.Printf("[dispatcher] #regmsg %s(%d 0x%x)", msgName, msgID, msgID) disp.RegisterCallback(msgID, func(ses cellnet.CellID, pkt *cellnet.Packet) { rawMsg, err := cellnet.ParsePacket(pkt, msgType) if err != nil { log.Printf("[cellnet] unmarshaling error:\n", err) return } userHandler(ses, rawMsg) }) }
func MapMessage(msgIns interface{}) { msgName := reflect.TypeOf(msgIns).String() msgID := cellnet.Name2ID(msgName) MapNameID(msgName, msgID) }
func main() { if len(os.Args) < 2 { help() return } id := cellnet.Name2ID(os.Args[1]) fmt.Printf("id: %d (0x%x)", id, id) }