func (self convertor) Convert2Params(entity *store.MessageEntity) []interface{} { val := reflect.ValueOf(*entity) fvs := make([]interface{}, 0, len(self.columns)) for _, v := range self.columns { var fv interface{} if v.columnName == "body" { if entity.MsgType == protocol.CMD_STRING_MESSAGE { fv = []byte(entity.GetBody().(string)) } else if entity.MsgType == protocol.CMD_BYTES_MESSAGE { fv = entity.GetBody().([]byte) } else { log.ErrorLog("kite_store", "convertor|Convert2Params|UnSupport MESSAGE TYPE|%s\n", entity.MsgType) } } else { f := val.FieldByName(v.fieldName) // log.Debug("convertor|Convert2Params|%s|%s\n", v.fieldName, f) switch f.Kind() { case reflect.Ptr: header, ok := f.Interface().(*protocol.Header) if ok { //头部用Pb序列化 data, err := protocol.MarshalPbMessage(header) if err != nil { log.ErrorLog("kite_store", "convertor|Convert2Params|Marshal|HEAD|FAIL|%s|%s\n", err, f.Addr().Interface()) return nil } fv = data } else { log.ErrorLog("kite_store", "convertor|Convert2Params|Not protocol.Header PRT |FAIL|%s\n", f.Addr()) return nil } case reflect.Slice, reflect.Array: if f.Type().Elem().Kind() == reflect.String { data, err := json.Marshal(f.Interface()) if nil != err { log.ErrorLog("kite_store", "convertor|Convert2Params|Marshal|Slice|FAIL||%s\n", err) return nil } fv = string(data) } else { fv = f.Interface() } default: fv = f.Interface() } } fvs = append(fvs, &fv) } return fvs }
func (self *AcceptHandler) Process(ctx *pipe.DefaultPipelineContext, event pipe.IEvent) error { // log.Debug("AcceptHandler|Process|%s|%t\n", self.GetName(), event) ae, ok := self.cast(event) if !ok { return pipe.ERROR_INVALID_EVENT_TYPE } //这里处理一下ae,做一下校验 var msg *store.MessageEntity switch ae.msgType { case protocol.CMD_DELIVER_ACK: //收到投递结果直接attach响应 // log.DebugLog("kite_handler", "AcceptHandler|DELIVER_ACK|%s|%t", ae.opaque, ae.msg) ae.remoteClient.Attach(ae.opaque, ae.msg) return nil case protocol.CMD_HEARTBEAT: hb := ae.msg.(*protocol.HeartBeat) event = pipe.NewHeartbeatEvent(ae.remoteClient, ae.opaque, hb.GetVersion()) ctx.SendForward(event) return nil case protocol.CMD_BYTES_MESSAGE: msg = store.NewMessageEntity(protocol.NewQMessage(ae.msg.(*protocol.BytesMessage))) case protocol.CMD_STRING_MESSAGE: msg = store.NewMessageEntity(protocol.NewQMessage(ae.msg.(*protocol.StringMessage))) default: //这只是一个bug不支持的数据类型能给你 log.WarnLog("kite_handler", "AcceptHandler|Process|%s|%t", INVALID_MSG_TYPE_ERROR, ae.msg) } if nil != msg { msg.PublishTime = time.Now().Unix() msg.KiteServer = self.kiteserver deliver := newPersistentEvent(msg, ae.remoteClient, ae.opaque) ctx.SendForward(deliver) return nil } return INVALID_MSG_TYPE_ERROR }