Search in sources :

Example 1 with Event

use of com.jd.blockchain.ledger.Event in project jdchain-core by blockchain-jd-com.

the class EventCacheHandle method addEvents.

@Override
public void addEvents(String key, Event... events) {
    if (events.length > 0) {
        mapLock.lock();
        try {
            Events eventList = eventsLruMap.get(key);
            if (eventList == null) {
                eventList = new Events();
                eventsLruMap.put(key, eventList);
            }
            for (Event event : events) {
                eventList.put(event.getSequence(), event);
                updateMaxHeight(event.getBlockHeight());
            }
        } finally {
            mapLock.unlock();
        }
    }
}
Also used : Event(com.jd.blockchain.ledger.Event)

Example 2 with Event

use of com.jd.blockchain.ledger.Event in project jdchain-core by blockchain-jd-com.

the class EventPublishingAccount method getEvents.

@Override
public Event[] getEvents(String eventName, long fromSequence, int count) {
    List<Event> events = new ArrayList<>();
    Dataset<String, TypedValue> ds = mklAccount.getDataset();
    long maxVersion = mklAccount.getDataset().getVersion(eventName) + 1;
    for (int i = 0; i < count && i <= maxVersion; i++) {
        TypedValue tv = ds.getValue(eventName, fromSequence + i);
        if (null == tv || tv.isNil()) {
            break;
        }
        Event event = BinaryProtocol.decode(tv.bytesValue());
        events.add(new EventInfo(event));
    }
    return events.toArray(new Event[events.size()]);
}
Also used : EventInfo(com.jd.blockchain.ledger.EventInfo) ArrayList(java.util.ArrayList) Event(com.jd.blockchain.ledger.Event) TypedValue(com.jd.blockchain.ledger.TypedValue)

Example 3 with Event

use of com.jd.blockchain.ledger.Event in project jdchain-core by blockchain-jd-com.

the class PullEventListener method getAndUpdateByCacheAndQuery.

private void getAndUpdateByCacheAndQuery(HashDigest ledgerHash, EventCache eventCache, EventPoint eventPoint, List<Event> events, String key, long start, long end) {
    List<Event> cachedEvents = new ArrayList<>();
    boolean needQuery = false;
    for (long l = start; l < end; l++) {
        Event event = eventCache.getEvent(key, l);
        if (event == null) {
            needQuery = true;
            break;
        }
        cachedEvents.add(event);
    }
    if (needQuery) {
        Event[] eventsByQuery = getEventsByQuery(ledgerHash, eventPoint, start, (int) (end - start));
        if (!empty(eventsByQuery)) {
            eventCache.addEvents(key, eventsByQuery);
            events.addAll(Arrays.asList(eventsByQuery));
        }
    } else {
        events.addAll(cachedEvents);
    }
}
Also used : ArrayList(java.util.ArrayList) Event(com.jd.blockchain.ledger.Event)

Example 4 with Event

use of com.jd.blockchain.ledger.Event in project jdchain-core by blockchain-jd-com.

the class EventGroupPublisher method getEvents.

@Override
public Event[] getEvents(String eventName, long fromSequence, int maxCount) {
    List<Event> eventsList = new ArrayList<>();
    Bytes key = encodeKey(eventName);
    long maxVersion = events.getVersion(key);
    for (int i = 0; i < maxCount && i <= maxVersion; i++) {
        byte[] bs = events.getValue(key, fromSequence + i);
        if (null == bs) {
            break;
        }
        Event event = BinaryProtocol.decode(bs);
        eventsList.add(new EventInfo(event));
    }
    return eventsList.toArray(new Event[eventsList.size()]);
}
Also used : Bytes(utils.Bytes) EventInfo(com.jd.blockchain.ledger.EventInfo) ArrayList(java.util.ArrayList) Event(com.jd.blockchain.ledger.Event)

Example 5 with Event

use of com.jd.blockchain.ledger.Event in project jdchain-core by blockchain-jd-com.

the class EventGroupPublisher method publish.

/**
 * 发布事件
 *
 * @param event
 * @return
 */
@Override
public long publish(Event event) {
    Bytes key = encodeKey(event.getName());
    long newSequence = events.setValue(key, BinaryProtocol.encode(event, Event.class), event.getSequence() - 1);
    if (newSequence < 0) {
        throw new LedgerException("Event sequence conflict! --[" + key + "]");
    }
    // 属于新发布的事件名
    if (ledgerDataStructure.equals(LedgerDataStructure.KV)) {
        if (newSequence == 0) {
            long nv = events.setValue(SYSTEMEVENT_SEQUENCE_KEY_PREFIX.concat(Bytes.fromString(String.valueOf(events.getDataCount() + event_index_in_block))), key.toBytes(), -1);
            if (nv < 0) {
                throw new LedgerException("Event seq already exist! --[id=" + key + "]");
            }
            event_index_in_block++;
        }
    }
    return newSequence;
}
Also used : Bytes(utils.Bytes) Event(com.jd.blockchain.ledger.Event) LedgerException(com.jd.blockchain.ledger.LedgerException)

Aggregations

Event (com.jd.blockchain.ledger.Event)5 ArrayList (java.util.ArrayList)3 EventInfo (com.jd.blockchain.ledger.EventInfo)2 Bytes (utils.Bytes)2 LedgerException (com.jd.blockchain.ledger.LedgerException)1 TypedValue (com.jd.blockchain.ledger.TypedValue)1