其他分享
首页 > 其他分享> > 【软件工程应用与实际】(3)JDchain对事件查询及监听

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

作者:互联网

@SDUSC

1 事件相关信息的获取

1.1 获取事件账户列表

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

参数

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

1.2 获取事件账户

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

参数

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

1.3 获取事件账户总数

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

参数

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

1.4 获取事件名数量

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

参数

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

1.5 获取事件名列表

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

参数

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

1.6 获取最新事件

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

参数

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

1.7 获取事件数量

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

参数

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

1.8 获取事件列表

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

参数

请求类型名称是否必需说明数据类型
pathledger账本哈希字符串
pathaddress事件账户地址字符串
pathevent_name事件名字符串
queryfromSequence查询的起始序号,默认为0数字
querycount查询返回事件的数量,默认最大返回值为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;
    }
});

  |

标签:count,数据类型,ledger,JDchain,软件工程,事件,字符串,eventMessage,监听
来源: https://blog.csdn.net/qq_57499230/article/details/122200492