func (r *respCall) DecodeMsgpack(dec *msgpack.Decoder) error { var proto util.Msg err := dec.Decode(&proto) if err != nil { return e.Forward(err) } switch proto { case util.ErrNil: case util.ErrOk: err := dec.Decode(&proto) if err != nil { return e.Forward(err) } switch proto { case util.ErrorPriv: var errtype string err := dec.Decode(&errtype) if err != nil { return e.Forward(err) } t, err := types.GetType(errtype) if err != nil { return e.Forward(err) } ptr := types.Make(reflect.PtrTo(t)) err = dec.DecodeValue(ptr) if err != nil { return e.Forward(err) } r.Err = reflect.Indirect(ptr).Interface().(error) case util.ErrorInt: var errStr string err := dec.Decode(&errStr) if err != nil { return e.Forward(err) } r.Err = errors.New(errStr) } default: return e.New("protocol error") } var lenght int err = dec.Decode(&lenght) if err != nil { return e.Forward(err) } if lenght > 0 { r.Vals = make([]reflect.Value, lenght) for i := range r.Vals { r.Vals[i], err = util.MsgPackDecode(dec) if err != nil { return e.Forward(err) } } } return nil }
func (r *reqCall) DecodeMsgpack(dec *msgpack.Decoder) error { err := dec.Decode(&r.Method) if err != nil { return e.Forward(err) } var lenght int err = dec.Decode(&lenght) if err != nil { return e.Forward(err) } r.Args = make([]reflect.Value, lenght) for i, _ := range r.Args { r.Args[i], err = util.MsgPackDecode(dec) if err != nil { return e.Forward(err) } } return nil }
func (r *respErr) DecodeMsgpack(dec *msgpack.Decoder) error { var msg util.Msg err := dec.Decode(&msg) if err != nil { return e.Forward(err) } switch msg { case util.ErrNil: return nil case util.ErrOk: val, err := util.MsgPackDecode(dec) if err != nil { return e.Forward(err) } r.Err = val.Interface().(error) return nil default: return e.New("protocol error") } }