func (self *rpcComponent) Start(p netfw.IPeer) { // 应答方 p.RegisterMessage("coredef.RemoteCallREQ", func(msg *coredef.RemoteCallREQ, ses *netdef.Session) { userpkt := &netdef.Packet{ MsgID: msg.GetUserMsgID(), Size: uint16(len(msg.GetUserMsg())), Data: msg.GetUserMsg(), } userc := netdef.NewPacketContext(userpkt, ses) injectResponseHandler(userc, p.GetCodec(), ses, msg) p.CallHandlers(int(userpkt.MsgID), userc) }) p.RegisterMessage("coredef.RemoteCallACK", func(msg *coredef.RemoteCallACK) { // 获得callid对应的调用上下文 rcd := self.getCallData(msg.GetCallID()) defer self.removeCallData(msg.GetCallID()) if rcd == nil { rcd.fail(lostCallDataError) return } err := proto.Unmarshal(msg.GetUserMsg(), rcd.Reply.(proto.Message)) if err != nil { rcd.fail(replyUnmarshalingError) return } // 回应请求方, 请求方解除阻塞 rcd.done() }) }