in orderbook-core/src/main/java/com/epam/deltix/orderbook/core/impl/L2SingleExchangeQuoteProcessor.java [76:112]
public Quote processL2EntryNew(final PackageHeaderInfo pck, final L2EntryNewInfo msg) {
final long exchangeId = msg.getExchangeId();
final Option<MutableExchange<Quote, L2Processor<Quote>>> exchange = getOrCreateExchange(exchangeId);
if (!exchange.hasValue()) {
// TODO Log warning!!
// TODO move to another palace
return null;
}
if (exchange.get().getProcessor().isWaitingForSnapshot()) {
return null;
}
final QuoteSide side = msg.getSide();
final L2MarketSide<Quote> marketSide = exchange.get().getProcessor().getMarketSide(side);
final int level = msg.getLevel();
if (marketSide.isInvalidInsert(level, msg.getPrice(), msg.getSize(), exchangeId)) {
if (validationOptions.isQuoteInsert()) {
clear();
eventHandler.onBroken();
}
return null;
}
final Quote quote;
if (level == marketSide.depth()) { // Add new worst quote
quote = pool.borrow();
} else if (marketSide.isFull()) { // Check side is Full and remove Worst quote
quote = marketSide.removeWorstQuote();
} else {
quote = pool.borrow();
}
quote.copyFrom(pck, msg);
marketSide.add(level, quote);
return quote;
}