Регистрация удаленных процедур с помощью автобана Java - PullRequest
0 голосов
/ 17 декабря 2018

Стандартный способ регистрации процедур в autobahn-java:

CompletableFuture<Registration> order_to_produce = session.register(prefix + "order_to_produce", this::order_to_produce);
order_to_produce.thenAccept(registration -> LOGGER.info("Registered procedure: " + registration.procedure));

Поскольку у нас много функций для регистрации, я думал поместить регистрационные имена и функции в HashMap, но я не могуссылка на любую функцию со ссылкой на метод.

Я хотел бы сделать что-то вроде этого:

    Map<String, Runnable> functions = new HashMap<>();
    functions.put("order_to_produce", this::order_to_produce);


    for (Map.Entry<String, Runnable> function : functions.entrySet())
    {
        CompletableFuture<Registration> registerProcedure = session.register(prefix + function.getKey(), function.getValue());
        registerProcedure.thenAccept(registration -> LOGGER.info("Registered procedure: " + registration.procedure));

        // or using reflection ?
        // 
        CompletableFuture<Registration> registerProcedure = session.register(prefix + function.getKey(), obj.getClass().getMethod(function.getKey()));
        registerProcedure.thenAccept(registration -> LOGGER.info("Registered procedure: " + registration.procedure));
    }

Есть ли способ сделать это?

В Python я мог бы сделатьэто с легкостью на бэкэнд-компонент.

functions = {'backend.add_service': self.add_service,
             'backend.online_services': self.services_online}

for functionToRegister in functions.keys():
    yield self.register(functions[functionToRegister], functionToRegister, options=self.REGISTER_OPTIONS)

С уважением, Марко.

1 Ответ

0 голосов
/ 17 декабря 2018

Мне все еще интересен оригинальный вопрос, но пока я сделал это так:

LinkedList<CompletableFuture<Registration>> functions = new LinkedList<>();
functions.add(session.register(prefix + "order_to_produce", this::order_to_produce));

for (CompletableFuture<Registration> function : functions) {
    function.thenAccept(registration -> LOGGER.info("Registered procedure: " + registration.procedure));
}
...