Как реализовать приемник событий chaincode на клиенте? - PullRequest
0 голосов
/ 16 апреля 2020

Для того, чтобы реализовать какой-либо механизм обратного вызова в моем клиенте, я изучаю события цепного кода. Я нашел этот урок о событиях с цепочкой: https://medium.com/coinmonks/tutorial-chaincode-event-listener-on-hyperledger-fabric-java-sdk-557304f1fe28. Я пытаюсь понять, как прослушивать события на моем клиенте.

Внутри моего Java цепного кода я делаю stub.setEvent(...) в конце, как в следующем фрагменте:

    final byte[] value = new byte[] {0X00};
    CompositeKey teaCakeIndexKey = stub.createCompositeKey(INDEX_CERT_PRODUCT,
            teaCakeCertificate.getCertNumber(),
            teaCakeCertificate.getOwnerUUID(),
            teaCakeCertificate.getProductSKU(),
            teaCakeCertificate.getUAID());
    stub.putState(teaCakeIndexKey.toString(), value);
    logger.info("Index key updated");

    stub.setEvent("transferOwner", null);
    return successfulResponse;

Мое намерение состоит в том, чтобы цепной код возвращал событие после успешной фиксации в книгу.

В моем клиенте у меня есть метод отправки транзакций:

public CustomResponse sendTransaction(String functionName, String[] params)
        throws InvalidArgumentException, ProposalException, InterruptedException, TransactionException, IOException {

    Channel channel = getChannel();
    logger.info("Channel: " + channel.getName());

    TransactionProposalRequest tpr = getTransactionProposalRequest(functionName, params);
    Collection<ProposalResponse> responses = channel.sendTransactionProposal(tpr);
    List<ProposalResponse> invalid = responses.stream().filter(r -> r.isInvalid()).collect(Collectors.toList());

    CustomResponse cresp = new CustomResponse();
    if (!invalid.isEmpty()) {
        invalid.forEach(response -> {
            cresp.setStatus("Error");
            cresp.setMessage(response.getMessage());
            cresp.setTransactionId(response.getTransactionID());
            logger.error(response.getMessage());
        });
    } else {
        List<ProposalResponse> verified = responses.stream().filter(r -> r.isVerified()).collect(Collectors.toList());
        verified.forEach(response -> {
            cresp.setStatus("Success");
            cresp.setMessage(response.getMessage());
            cresp.setTransactionId(response.getTransactionID());
            logger.info(response.getMessage());
        });
    }

    channel.sendTransaction(responses);
    return cresp;
}

Пройдя учебник Я до сих пор не уверен, где и как мне следует реализовать механизм прослушивания событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...