예제 #1
0
func (r respCall) EncodeMsgpack(enc *msgpack.Encoder) error {
	if r.Err == nil {
		err := enc.Encode(util.ErrNil)
		if err != nil {
			return e.Forward(err)
		}
	} else {
		err := enc.Encode(util.ErrOk)
		if err != nil {
			return e.Forward(err)
		}
		switch v := r.Err.(type) {
		case *e.Error:
			err = enc.Encode(util.ErrorPriv)
			if err != nil {
				return e.Forward(err)
			}
			err = enc.Encode(types.Name(r.Err))
			if err != nil {
				return e.Forward(err)
			}
			err = enc.Encode(r.Err)
			if err != nil {
				return e.Forward(err)
			}
		case error:
			err = enc.Encode(util.ErrorInt)
			if err != nil {
				return e.Forward(err)
			}
			err = enc.Encode(v.Error())
			if err != nil {
				return e.Forward(err)
			}
		}
	}
	err := enc.Encode(len(r.Vals))
	if err != nil {
		return e.Forward(err)
	}
	for _, arg := range r.Vals {
		err := util.MsgPackEncode(enc, arg)
		if err != nil {
			return e.Forward(err)
		}
	}
	return nil
}
예제 #2
0
func (r reqCall) EncodeMsgpack(enc *msgpack.Encoder) error {
	err := enc.Encode(r.Method)
	if err != nil {
		return e.Forward(err)
	}
	err = enc.Encode(len(r.Args))
	if err != nil {
		return e.Forward(err)
	}
	for _, arg := range r.Args {
		err := util.MsgPackEncode(enc, arg)
		if err != nil {
			return e.Forward(err)
		}
	}
	return nil
}
예제 #3
0
// TODO: Implementar interfaces do msgpack. Testar boom com -c 4. E tentar encontrar leek no session
func (r respErr) EncodeMsgpack(enc *msgpack.Encoder) error {
	if r.Err == nil {
		err := enc.Encode(util.ErrNil)
		if err != nil {
			return e.Forward(err)
		}
		return nil
	}
	err := enc.Encode(util.ErrOk)
	if err != nil {
		return e.Forward(err)
	}
	val := reflect.ValueOf(r.Err)
	err = util.MsgPackEncode(enc, val)
	if err != nil {
		return e.Forward(err)
	}
	return nil
}