in orderbook-core/src/main/java/com/epam/deltix/orderbook/core/impl/AbstractL2MultiExchangeProcessor.java [195:229]
public boolean processL2EntryUpdate(final PackageHeaderInfo pck, final L2EntryUpdateInfo msg) {
assert pck.getPackageType() == PackageType.INCREMENTAL_UPDATE;
final int level = msg.getLevel();
final QuoteSide side = msg.getSide();
@Alphanumeric final long exchangeId = msg.getExchangeId();
final BookUpdateAction action = msg.getAction();
final Option<MutableExchange<Quote, L2Processor<Quote>>> exchange = getExchanges().getById(exchangeId);
if (!exchange.hasValue() || exchange.get().getProcessor().isEmpty() ||
exchange.get().getProcessor().isWaitingForSnapshot()) {
return false;
}
final L2MarketSide<Quote> marketSide = exchange.get().getProcessor().getMarketSide(side);
if (marketSide.isInvalidUpdate(action, level, msg.getPrice(), msg.getSize(), exchangeId)) {
if (validationOptions.isQuoteUpdate()) {
unmapQuote(exchangeId);
exchange.get().getProcessor().processL2EntryUpdate(pck, msg);
}
return false;
}
final BookUpdateAction bookUpdateAction = msg.getAction();
if (bookUpdateAction == BookUpdateAction.DELETE) {
final Quote quote = marketSide.getQuote(level);
removeQuote(quote, side);
} else if (bookUpdateAction == BookUpdateAction.UPDATE) {
final Quote quote = marketSide.getQuote(level);
updateQuote(quote, side, msg);
}
return exchange.get().getProcessor().processL2EntryUpdate(pck, msg);
}