Как получить тип расширения из потока данных proto buf UDP

Я читаю поток UDP, используя java и proto buf, который поддерживает расширение.

В любой момент времени я могу получить три разных типа данных, которые соответствуют трем разным типам протофайлов.

Я использую

            registry.add(CpuUtilization.cpuUtilExt);
            registry.add(NpuUtilization.npuExt);
            registry.add(Optics.opticsExt);

Все три прото-файла используют приведенный ниже синтаксис для расширения.

 extend NetworksSensors {
        optional PFEHeapInfo pfeHeapInfoExt = 1;
    }
    extend NetworksSensors {
        optional NpuUtilization npuExt = 2;
    }
    extend NetworksSensors {
        optional CpuUtilization cpuUtilExt = 3;
    }

Что я делаю, так это создаю три отдельных метода и обрабатываю данные для каждого типа датчика на основе значения внутри поля заголовка.

Есть ли способ решить, какой метод вызывать на основе поступающих данных расширения?

Может быть, какое-то поле из дескриптора может помочь, но я не знаю, как его использовать. Есть идеи?


person Ammad    schedule 22.04.2016    source источник


Ответы (1)


Я нашел способ проверить, имеют ли данные определенное расширение или нет, но все же должен понять, как получить объект Extension из объекта networkSensors.

networkSensors.hasExtension(FirewallClass.firewallExt)

Класс FirewallClass — это автоматически сгенерированный класс с использованием компилятора protoc.

person Ammad    schedule 26.04.2016