code: func (codec *SyncCodec) Encode(data interface{}, out *ByteBuf) error {
  	if msg, ok := data.(*notifyRaw); ok {
  		out.WriteByte(cmdNotifyRaw)
  		out.WriteByteBuf(msg.buf)
  		releaseNotifyRaw(msg)
  		return nil
  	} else if msg, ok := data.(*notify); ok {
  		out.WriteByte(cmdNotify)
  		out.WriteUint64(msg.offset)
  		releaseNotify(msg)
  		return nil
  	} else if msg, ok := data.(*notifySync); ok {
  		out.WriteByte(cmdNotifySync)
  		out.WriteUint64(msg.offset)
  		releaseNotifySync(msg)
  		return nil
  	} else if msg, ok := data.(*notifySyncRsp); ok {
  		out.WriteByte(cmdNotifySyncRsp)
  		out.WriteUint64(msg.offset)
  		out.WriteByte(msg.count)
  		out.WriteByteBuf(msg.buf)
  		releaseNotifySyncRsp(msg)
  		return nil
  	} else if msg, ok := data.(*notifyHB); ok {
  		out.WriteByte(cmdNotifyHB)
  		out.WriteUint64(msg.offset)
  		return nil
  	}
  
  	return fmt.Errorf("not support msg: %v", data)
  }
docs: // Encode encode sync protocol