protected void onJson()

in java/connectors/kraken-futures/src/main/java/com/epam/deltix/data/connectors/kraken/KrakenFuturesFeed.java [63:115]


    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 instrument = object.getString("product_id");
        if (instrument == null) {
            return;
        }

        String feed = object.getString("feed");
        if ("book_snapshot".equalsIgnoreCase(feed)) {
            long timestamp = object.getLong("timestamp");

            QuoteSequenceProcessor quotesListener = processor().onBookSnapshot(instrument, timestamp);
            processSnapshotSide(quotesListener, object.getArray("bids"), false);
            processSnapshotSide(quotesListener, object.getArray("asks"), true);
            quotesListener.onFinish();
        } else if ("book".equalsIgnoreCase(feed)) {
            long timestamp = object.getLong("timestamp");

            QuoteSequenceProcessor quotesListener = processor().onBookUpdate(instrument, timestamp);
            long size = object.getDecimal64Required("qty");
            if (Decimal64Utils.isZero(size)) {
                size = TypeConstants.DECIMAL_NULL; // means delete the price
            }
            quotesListener.onQuote(
                object.getDecimal64Required("price"),
                size,
                "sell".equalsIgnoreCase(object.getStringRequired("side"))
            );
            quotesListener.onFinish();
        } else if ("trade".equalsIgnoreCase(feed)) {
            String tradeDirection = object.getString("side");
            AggressorSide side = "buy".equalsIgnoreCase(tradeDirection) ? AggressorSide.BUY : AggressorSide.SELL;

            processor().onTrade(instrument,
                object.getLong("time"),
                object.getDecimal64Required("price"),
                object.getDecimal64Required("qty"),
                side
            );
        }
    }