
com.jd.blockchain.sdk.service.event.SystemEventRunnable Maven / Gradle / Ivy
The newest version!
package com.jd.blockchain.sdk.service.event;
import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.ledger.Event;
import com.jd.blockchain.ledger.EventInfo;
import com.jd.blockchain.ledger.LedgerInfo;
import com.jd.blockchain.ledger.SystemEvent;
import com.jd.blockchain.ledger.TypedValue;
import com.jd.blockchain.sdk.SystemEventListener;
import com.jd.blockchain.sdk.EventContext;
import com.jd.blockchain.sdk.EventListenerHandle;
import com.jd.blockchain.sdk.SystemEventPoint;
import com.jd.blockchain.transaction.BlockchainQueryService;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
/**
* 系统事件线程
*
* @author shaozhuguang
*/
public class SystemEventRunnable extends AbstractEventRunnable {
private BlockchainQueryService queryService;
private SystemEventListener listener;
public SystemEventRunnable(HashDigest ledgerHash, BlockchainQueryService queryService, Set eventPointSet,
SystemEventListener listener, EventListenerHandle handle) {
super(ledgerHash, eventPointSet, handle);
this.listener = listener;
this.queryService = queryService;
}
@Override
Event[] loadEvent(SystemEventPoint eventPoint, long fromSequence, int maxCount) {
List events = new ArrayList<>();
if (eventPoint.getEventName().equals(SystemEvent.NEW_BLOCK_CREATED.getName())) {
LedgerInfo ledgerInfo = queryService.getLedger(getLedgerHash());
for (long i = fromSequence; i < fromSequence + maxCount && i <= ledgerInfo.getLatestBlockHeight(); i++) {
EventInfo info = new EventInfo();
info.setName(eventPoint.getEventName());
info.setSequence(i);
info.setContent(TypedValue.fromInt64(ledgerInfo.getLatestBlockHeight()));
info.setBlockHeight(i);
events.add(info);
}
}
return events.toArray(new EventInfo[events.size()]);
}
@Override
void onEvent(Event[] events) {
if(events.length == 0) {
return;
}
listener.onEvents(events, eventContext(events[0]));
}
@Override
EventContext eventContext(Event event) {
EventContextData context = new EventContextData<>(getLedgerHash(), getHandle());
return context;
}
@Override
String eventPointKey(SystemEventPoint eventPoint) {
return eventPoint.getEventName();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy