【软件工程应用与实际】(3)JDchain对事件查询及监听

@SDUSC

1 事件相关信息的获取

1.1 获取事件账户列表

GET /ledgers/{ledger}/events/user/accounts?fromIndex={fromIndex}&count={count}

参数

请求类型 名称 是否必需 说明 数据类型
path ledger 账本哈希 字符串
query fromIndex 查询的起始序号,默认为0 数字
query count 查询返回事件账户的数量,默认最大返回值为100,小于0或大于100均返回最大可返回结果集 数字

1.2 获取事件账户

GET /ledgers/{ledger}/events/user/accounts/{address}

参数

请求类型 名称 是否必需 说明 数据类型
path ledger 账本哈希 字符串
address 账户地址 事件账户地址 字符串

1.3 获取事件账户总数

GET /ledgers/{ledger}/events/user/accounts/count

参数

请求类型 名称 是否必需 说明 数据类型
path ledger 账本哈希 字符串

1.4 获取事件名数量

GET /ledgers/{ledger}/events/user/accounts/{address}/names/count

参数

请求类型 名称 是否必需 说明 数据类型
path ledger 账本哈希 字符串
path address 事件账户地址 字符串

1.5 获取事件名列表

GET /ledgers/{ledger}/events/user/accounts/{address}/names?fromIndex={fromIndex}&count={count}

参数

请求类型 名称 是否必需 说明 数据类型
path ledger 账本哈希 字符串
path address 事件账户地址 字符串
query fromIndex 查询的起始序号,默认为0 数字
query count 查询返回事件账户的数量,默认最大返回值为100,小于0或大于100均返回最大可返回结果集 数字

1.6 获取最新事件

GET /ledgers/{ledger}/events/user/accounts/{address}/names/{event_name}/latest

参数

请求类型 名称 是否必需 说明 数据类型
path ledger 账本哈希 字符串
path address 事件账户地址 字符串
path event_name 事件名 字符串

1.7 获取事件数量

GET /ledgers/{ledger}/events/user/accounts/{address}/names/{event_name}/count

参数

请求类型 名称 是否必需 说明 数据类型
path ledger 账本哈希 字符串
path address 事件账户地址 字符串
path event_name 事件名 字符串

1.8 获取事件列表

GET /ledgers/{ledger}/events/user/accounts/{address}/names/{event_name}?fromSequence={fromSequence}&count={count}

参数

请求类型 名称 是否必需 说明 数据类型
path ledger 账本哈希 字符串
path address 事件账户地址 字符串
path event_name 事件名 字符串
query fromSequence 查询的起始序号,默认为0 数字
query count 查询返回事件的数量,默认最大返回值为100,小于0或大于100均返回最大可返回结果集 数字

2事件的监听

2.1 事件的发布

TransactionTemplate txTemp = blockchainService.newTransaction(ledger);

// sequence是针对此消息name的序列严格递增,初始为-1,可通过查询事件名下最新事件获取序列参数
txTemp.eventAccount(Bytes.fromBase58("LdeNiAPuZ5tpYZVrrbELJNjqdvB51PBpNd8QA")).publish("topic", "content", -1);

PreparedTransaction ptx = txTemp.prepare();
ptx.sign(adminKey);
TransactionResponse response = ptx.commit();

2.2. 监听事件

// 监听系统事件,目前仅有新区快产生事件
blockchainService.monitorSystemEvent(ledger,
        SystemEvent.NEW_BLOCK_CREATED, 0, (eventMessages, eventContext) -> {
            for (Event eventMessage : eventMessages) {
                // content中存放的是当前链上最新高度
                System.out.println("New block:" + eventMessage.getSequence() + ":" + BytesUtils.toLong(eventMessage.getContent().getBytes().toBytes()));
            }
        });

// 监听用户自定义事件
blockchainService.monitorUserEvent(ledger, "LdeNr7H1CUbqe3kWjwPwiqHcmd86zEQz2VRye", "sample-event", 0, (eventMessage, eventContext) -> {

    BytesValue content = eventMessage.getContent();
    switch (content.getType()) {
        case TEXT:
        case XML:
        case JSON:
            System.out.println(eventMessage.getName() + ":" + eventMessage.getSequence() + ":" + content.getBytes().toUTF8String());
            break;
        case INT64:
        case TIMESTAMP:
            System.out.println(eventMessage.getName() + ":" + eventMessage.getSequence() + ":" + BytesUtils.toLong(content.getBytes().toBytes()));
            break;
        default: // byte[], Bytes
            System.out.println(eventMessage.getName() + ":" + eventMessage.getSequence() + ":" + content.getBytes().toBase58());
            break;
    }
});

  |
上一篇:fabric源码相关


下一篇:解axie infinity 与ledger之囧