lib/protocol/protocol.js
function decodeJoinGroupResponse (resp) {
  var result = {
    members: []
  };

  var error;

  Binary.parse(resp)
    .word32bs('size')
    .word32bs('correlationId')
    .word16bs('errorCode')
    .tap(function (vars) {
      error = createGroupError(vars.errorCode);
    })
    .word32bs('generationId')
    .tap(function (vars) {
      result.generationId = vars.generationId;
    })
    .word16bs('groupProtocol')
    .tap(function (vars) {
      this.buffer('groupProtocol', vars.groupProtocol);
      result.groupProtocol = vars.groupProtocol = vars.groupProtocol.toString();
    })
    .word16bs('leaderId')
    .tap(function (vars) {
      this.buffer('leaderId', vars.leaderId);
      result.leaderId = vars.leaderId = vars.leaderId.toString();
    })
    .word16bs('memberId')
    .tap(function (vars) {
      this.buffer('memberId', vars.memberId);
      result.memberId = vars.memberId = vars.memberId.toString();
    })
    .word32bs('memberNum')
    .loop(function (end, vars) {
      if (error) {
        return end();
      }

      if (vars.memberNum-- === 0) return end();
      var memberMetadata;
      this.word16bs('groupMemberId')
        .tap(function (vars) {
          this.buffer('groupMemberId', vars.groupMemberId);
          vars.memberId = vars.groupMemberId.toString();
        })
        .word32bs('memberMetadata')
        .tap(function (vars) {
          if (vars.memberMetadata > -1) {
            this.buffer('memberMetadata', vars.memberMetadata);
            memberMetadata = decodeGroupData(this.vars.memberMetadata);
            memberMetadata.id = vars.memberId;
            result.members.push(memberMetadata);
          }
        });
    });

  return error || result;
}
function decodeJoinGroupResponse (resp) {
  var result = {
    members: []
  };

  var error;

  Binary.parse(resp)
    .word32bs('size')
    .word32bs('correlationId')
    .word16bs('errorCode')
    .tap(function (vars) {
      error = createGroupError(vars.errorCode);
    })
    .word32bs('generationId')
    .tap(function (vars) {
      result.generationId = vars.generationId;
    })
    .word16bs('groupProtocol')
    .tap(function (vars) {
      this.buffer('groupProtocol', vars.groupProtocol);
      result.groupProtocol = vars.groupProtocol = vars.groupProtocol.toString();
    })
    .word16bs('leaderId')
    .tap(function (vars) {
      this.buffer('leaderId', vars.leaderId);
      result.leaderId = vars.leaderId = vars.leaderId.toString();
    })
    .word16bs('memberId')
    .tap(function (vars) {
      this.buffer('memberId', vars.memberId);
      result.memberId = vars.memberId = vars.memberId.toString();
    })
    .word32bs('memberNum')
    .loop(function (end, vars) {
      if (error) {
        return end();
      }

      if (vars.memberNum-- === 0) return end();
      var memberMetadata;
      this.word16bs('groupMemberId')
        .tap(function (vars) {
          this.buffer('groupMemberId', vars.groupMemberId);
          vars.memberId = vars.groupMemberId.toString();
        })
        .word32bs('memberMetadata')
        .tap(function (vars) {
          if (vars.memberMetadata > -1) {
            this.buffer('memberMetadata', vars.memberMetadata);
            memberMetadata = decodeGroupData(this.vars.memberMetadata);
            memberMetadata.id = vars.memberId;
            result.members.push(memberMetadata);
          }
        });
    });

  return error || result;
}
function decodeJoinGroupResponse ( resp ) { var result = { members : [ ] } ; var error ; Binary . parse ( resp ) . word32bs ( 'size' ) . word32bs ( 'correlationId' ) . word16bs ( 'errorCode' ) . tap ( function ( vars ) { error = createGroupError ( vars . errorCode ) ; } ) . word32bs ( 'generationId' ) . tap ( function ( vars ) { result . generationId = vars . generationId ; } ) . word16bs ( 'groupProtocol' ) . tap ( function ( vars ) { this . buffer ( 'groupProtocol' , vars . groupProtocol ) ; result . groupProtocol = vars . groupProtocol = vars . groupProtocol . toString ( ) ; } ) . word16bs ( 'leaderId' ) . tap ( function ( vars ) { this . buffer ( 'leaderId' , vars . leaderId ) ; result . leaderId = vars . leaderId = vars . leaderId . toString ( ) ; } ) . word16bs ( 'memberId' ) . tap ( function ( vars ) { this . buffer ( 'memberId' , vars . memberId ) ; result . memberId = vars . memberId = vars . memberId . toString ( ) ; } ) . word32bs ( 'memberNum' ) . loop ( function ( end , vars ) { if ( error ) { return end ( ) ; } if ( vars . memberNum -- === 0 ) return end ( ) ; var memberMetadata ; this . word16bs ( 'groupMemberId' ) . tap ( function ( vars ) { this . buffer ( 'groupMemberId' , vars . groupMemberId ) ; vars . memberId = vars . groupMemberId . toString ( ) ; } ) . word32bs ( 'memberMetadata' ) . tap ( function ( vars ) { if ( vars . memberMetadata > - 1 ) { this . buffer ( 'memberMetadata' , vars . memberMetadata ) ; memberMetadata = decodeGroupData ( this . vars . memberMetadata ) ; memberMetadata . id = vars . memberId ; result . members . push ( memberMetadata ) ; } } ) ; } ) ; return error || result ; }
/*

v0 and v1 supported in 0.9.0 and greater
JoinGroupResponse => ErrorCode GenerationId GroupProtocol LeaderId MemberId Members
ErrorCode => int16
GenerationId => int32
GroupProtocol => string
LeaderId => string
MemberId => string
Members => [MemberId MemberMetadata]
MemberId => string
MemberMetadata => bytes
/ *