-type NewCodec struct{}
-
-func (*NewCodec) EncodeMsg(msg api.Message, msgID uint16) (data []byte, err error) {
- if msg == nil {
- return nil, errors.New("nil message passed in")
- }
- marshaller, ok := msg.(Marshaler)
- if !ok {
- return nil, fmt.Errorf("message %s does not implement marshaller", msg.GetMessageName())
- }
-
- size := marshaller.Size()
- offset := getOffset(msg)
- //fmt.Printf("size=%d offset=%d\n", size, offset)
-
- b := make([]byte, size+offset)
- b[0] = byte(msgID >> 8)
- b[1] = byte(msgID)
-
- //fmt.Printf("len(b)=%d cap(b)=%d\n", len(b), cap(b))
- //b = append(b, byte(msgID>>8), byte(msgID))
-
- //buf := new(bytes.Buffer)
- //buf.Grow(size)
-
- // encode msg ID
- //buf.WriteByte(byte(msgID >> 8))
- //buf.WriteByte(byte(msgID))
-
- data, err = marshaller.Marshal(b[offset:])
- if err != nil {
- return nil, err
- }
- //buf.Write(b)
-
- return b[0:len(b):len(b)], nil
-}
-
-func getOffset(msg api.Message) (offset int) {
- switch msg.GetMessageType() {
- case api.RequestMessage:
- return 10
- case api.ReplyMessage:
- return 6
- case api.EventMessage:
- return 6
- }
- return 2
-}
-
-func (*NewCodec) DecodeMsg(data []byte, msg api.Message) (err error) {
- if msg == nil {
- return errors.New("nil message passed in")
- }
- marshaller, ok := msg.(Unmarshaler)
- if !ok {
- return fmt.Errorf("message %s does not implement marshaller", msg.GetMessageName())
- }
-
- offset := getOffset(msg)
-
- err = marshaller.Unmarshal(data[offset:len(data)])
- if err != nil {
- return err
- }
-
- return nil