in java/connectors/bitmex/src/main/java/com/epam/deltix/data/connectors/bitmex/BitmexFeed.java [66:117]
protected void onJson(final CharSequence data, final boolean last, final JsonWriter jsonWriter) {
jsonParser.parse(data);
if (!last) {
return;
}
JsonValue jsonValue = jsonParser.eoj();
JsonObject object = jsonValue.asObject();
if (object == null) {
return;
}
String type = object.getString("table");
if ("orderBookL2".equalsIgnoreCase(type)) {
String action = object.getString("action");
JsonArray bookData = object.getArray("data");
if (bookData != null && bookData.size() > 0) {
JsonObject firstObject = bookData.getObject(0);
String instrument = firstObject.getString("symbol");
LongToLongHashMap idToPrice = getPriceLevels(instrument);
if ("partial".equalsIgnoreCase(action)) {
QuoteSequenceProcessor quotesListener = processor().onBookSnapshot(instrument, getTimestamp(bookData));
processSnapshot(instrument, quotesListener, idToPrice, bookData);
quotesListener.onFinish();
} else {
QuoteSequenceProcessor quotesListener = processor().onBookUpdate(instrument, getTimestamp(bookData));
processChanges(instrument, quotesListener, idToPrice, action, bookData);
quotesListener.onFinish();
}
}
} else if ("trade".equalsIgnoreCase(type)) {
String action = object.getString("action");
if ("insert".equalsIgnoreCase(action)) {
JsonArray tradeData = object.getArray("data");
if (tradeData != null) {
for (int i = 0; i < tradeData.size(); ++i) {
JsonObject trade = tradeData.getObject(i);
long price = trade.getDecimal64Required("price");
long size = trade.getDecimal64Required("size");
String symbol = trade.getStringRequired("symbol");
long timestamp = dtParser.set(trade.getStringRequired("timestamp")).millis();
String tradeDirection = trade.getString("side");
AggressorSide side = "buy".equalsIgnoreCase(tradeDirection) ? AggressorSide.BUY : AggressorSide.SELL;
processor().onTrade(symbol, timestamp, price, size, side);
}
}
}
}
}