in orderbook-core/src/main/java/com/epam/deltix/orderbook/core/impl/L2SingleExchangeQuoteProcessor.java [115:149]
public boolean processL2EntryUpdate(final PackageHeaderInfo pck, final L2EntryUpdateInfo msg) {
final QuoteSide side = msg.getSide();
final int level = msg.getLevel();
@Alphanumeric final long exchangeId = msg.getExchangeId();
final BookUpdateAction action = msg.getAction();
final Option<MutableExchange<Quote, L2Processor<Quote>>> exchange = getExchanges().getById(exchangeId);
if (!exchange.hasValue()) {
// TODO move to another palace
return false;
}
if (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()) {
clear();
eventHandler.onBroken();
return false;
}
return true; // skip invalid update
}
if (action == BookUpdateAction.DELETE) {
final Quote remove = marketSide.remove(level);
pool.release(remove);
} else if (action == BookUpdateAction.UPDATE) {
final Quote quote = marketSide.getQuote(level);
quote.copyFrom(pck, msg);
}
return true;
}