private void handleJoinGroupRequest(ChannelHandlerContext ctx, Request request) {
JoinGroupRequest joinGroupRequest = (JoinGroupRequest) request.getBody();
ResponseHeader responseHeader = new ResponseHeader(request.getHeader().correlationId());
List<ProtocolEntry> protocols = joinGroupRequest.groupProtocols().stream().map(protocol -> new ProtocolEntry(protocol.name(), Utils.toArray(protocol.metadata()))).collect(Collectors.toList());
coordinator.handleJoinGroup(
joinGroupRequest.groupId(),
joinGroupRequest.memberId(),
request.getHeader().clientId(),
request.getClientAddress().toString(),
joinGroupRequest.rebalanceTimeout(),
joinGroupRequest.sessionTimeout(),
joinGroupRequest.protocolType(),
protocols,
(joinResult) -> {
Map<String, ByteBuffer> members = joinResult.getMembers().entrySet().stream().collect(Collectors.toMap(k -> k.getKey(), k -> ByteBuffer.wrap(k.getValue())));
JoinGroupResponse responseBody = new JoinGroupResponse(request.getHeader().apiVersion(), joinResult.getErrorCode(), joinResult.getGenerationId(),
joinResult.getSubProtocol(), joinResult.getMemberId(), joinResult.getLeaderId(), members);
logger.trace(String.format("Sending join group response %s for correlation id %d to client %s.",
responseBody, request.getHeader().correlationId(), request.getHeader().clientId()));
sendResponse(ctx, new Response(responseHeader, responseBody));
}
);
}