in orderbook-core/src/main/java/com/epam/deltix/orderbook/core/impl/CompactL2SingleExchangeQuoteProcessor.java [130:188]
public boolean processL2Snapshot(final PackageHeaderInfo pck) {
if (!isSnapshotAllowed(pck)) {
return false;
}
final ObjectList<BaseEntryInfo> entries = pck.getEntries();
clear();
int askCnt = 0;
int bidCnt = 0;
for (int i = 0; i < entries.size(); i++) {
final BaseEntryInfo e = entries.get(i);
if (e instanceof L2EntryNewInterface) {
final L2EntryNewInterface entry = (L2EntryNewInterface) e;
final int level = entry.getLevel();
final QuoteSide side = entry.getSide();
@Alphanumeric final long exchangeId = entry.getExchangeId();
// We expect that exchangeId is valid and all entries have the same exchangeId
final Option<MutableExchange<Quote, CompactL2Processor<Quote>>> exchange = getOrCreateExchange(exchangeId);
if (!exchange.hasValue()) {
clear();
eventHandler.onBroken();
return false;
}
final CompactL2MarketSide<Quote> marketSide = exchange.get().getProcessor().getMarketSide(side);
// Both side have the same max depth
final int maxDepth = marketSide.getMaxDepth();
if ((side == ASK && askCnt == maxDepth) || (side == BID && bidCnt == maxDepth)) {
continue;
}
marketSide.add(level, entry.getPrice(), entry.getSize());
if (side == ASK) {
askCnt++;
} else {
bidCnt++;
}
if (askCnt == maxDepth && bidCnt == maxDepth) {
break;
}
}
}
//Validate state after snapshot
//We believe that snapshot is valid, but...
if (!asks.validateState() || !bids.validateState()) {
clear();
eventHandler.onBroken();
return false;
}
eventHandler.onSnapshot();
return true;
}