All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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