Пример #1
0
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
}
Пример #2
0
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
}
Пример #3
0
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")
	}
}