public byte handleHandshakeRequest(TurmsConnection connection, String nodeId) {
        Member member = discoveryService.getMember(nodeId);
        if (member == null) {
            return OpeningHandshakeRequest.RESPONSE_CODE_UNKNOWN_MEMBER;
        }
        TurmsConnection existingConnection = nodeIdToConnection.get(nodeId);
        if (existingConnection != null) {
            if (!existingConnection.getConnection()
                    .isDisposed()) {
                return OpeningHandshakeRequest.RESPONSE_CODE_CONNECTION_ALREADY_EXISTS;
            }
        } else if (connection.getConnection()
                .isDisposed()) {
            onConnectionClosed(connection, null);
            return OpeningHandshakeRequest.RESPONSE_CODE_CONNECTION_CLOSED;
        }
        connection.setNodeId(nodeId);
        onMemberConnectionHandshakeCompleted(member, connection, false);
        return OpeningHandshakeRequest.RESPONSE_CODE_SUCCESS;
    }
Use supplier rather than just listener so that we can bind each generated listener to a
specific TcpConnection to make logic simple
turms-server-common/src/main/java/im/turms/server/common/infra/cluster/service/connection/ConnectionService.java