protected void onJson()

in java/connectors/bybit/src/main/java/com/epam/deltix/data/connectors/bybit/BybitFeed.java [136:185]


    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();

        String topic = object.getString("topic");
        if (topic == null) {
            return;
        }

        if (topic.startsWith("orderbook")) {
            String type = object.getString("type");
            long timestamp = object.getLong("ts");
            JsonObject jsonData = object.getObject("data");
            String symbol = jsonData.getString("s");
            if (type.equalsIgnoreCase("snapshot")) {
                QuoteSequenceProcessor quotesListener = processor().onBookSnapshot(symbol, timestamp);
                processSnapshotSide(quotesListener, jsonData.getArray("b"), false);
                processSnapshotSide(quotesListener, jsonData.getArray("a"), true);
                quotesListener.onFinish();
            } else if (type.equalsIgnoreCase("delta")) {
                QuoteSequenceProcessor quotesListener = processor().onBookUpdate(symbol, timestamp);
                processChanges(quotesListener, jsonData.getArray("b"), false);
                processChanges(quotesListener, jsonData.getArray("a"), true);
                quotesListener.onFinish();
            }
        } else if (topic.startsWith("publicTrade")) {
            String type = object.getString("type");
            if (type.equalsIgnoreCase("snapshot")) {
                long timestamp = object.getLong("ts");
                JsonArray jsonDataArray = object.getArrayRequired("data");
                for (int i = 0; i < jsonDataArray.size(); ++i) {
                    JsonObject trade = jsonDataArray.getObjectRequired(i);
                    String symbol = trade.getString("s");
                    long price = trade.getDecimal64Required("p");
                    long size = trade.getDecimal64Required("v");
                    String sideStr = trade.getString("S");

                    AggressorSide side = sideStr.equalsIgnoreCase("buy") ? AggressorSide.BUY : AggressorSide.SELL;

                    processor().onTrade(symbol, timestamp, price, size, side);
                }
            }
        }
    }