Получение наблюдаемых изменений объекта на сервере Leshan - PullRequest
0 голосов
/ 23 октября 2018

Я создаю простой прототип, основанный на демоверсии leshan-server, включенной в репозиторий.Я пытаюсь получать обновления от объектов, которые были обнаружены.Захваты пакетов показывают, что обновления поступают на сервер, но я не получаю уведомления о них.

Ближайший ответ, который я нашел, с 2015 года ( Как получить обновленный контент на Observedресурс в Leshan? ) - но последующие изменения в кодовой базе Leshan сделали эту технику неосуществимой.

Я пытался использовать ObservationService для добавления ObservationListener, но это, кажется, только предупреждает меня, когдаНаблюдение было запрошено, а не когда конечная точка отправляет измененные значения.

static private void attachListener(final LeshanServer server) {
    System.out.println("Attaching Listener");
    server.getObservationService().addListener(new ObservationListener() {
        @Override
        public void newObservation(Observation observation, Registration registration) {
            System.out.println("New Observation");
        }
        @Override
        public void cancelled(Observation observation) {
            System.out.println("Observation cancellation");
        }
        @Override
        public void onResponse(Observation observation, Registration registration, ObserveResponse response) {
            System.out.println("Observation Response");
        }
        @Override
        public void onError(Observation observation, Registration registration, Exception error) {
            System.out.println("Observation Error");
        }
    });
}

Как мне прослушивать наблюдаемые объекты на сервере Leshan?

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Если вы используете Leshan-server-Demo и если вы хотите прослушивать уведомления об изменениях в уведомлении клиента из браузера, ваша внешняя сторона может использовать источник событий (событие, отправленное сервером) для получения уведомлений от Leshan-Server Demo.

Например, в моем приложении angular 7.0 я слушаю изменения сообщений COAP, как показано ниже,

     // Register Event Source
      constructor() {
        this.eventsource = new EventSource('server/event?ep=' + this.clientId);
      }

       // Add listener for COAP messages call back
      ngOnInit() {   
        this.eventsource.addEventListener('COAPLOG', msg => this.coapLogCallback(msg), false);
        console.error('Event Source', this.eventsource);
      }

      // modify coaplogs arrays
      coapLogCallback(msg) {
        var log = JSON.parse(msg.data);
        if (100 < this.coaplogs.length) this.coaplogs.shift();
        this.coaplogs.unshift(log);
      }
0 голосов
/ 10 декабря 2018

Вам нужно обработать onResponse: From https://github.com/eclipse/leshan/blob/f315c66602b1061175f2441c019b862946d08a55/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/EventServlet.java#L133

@Override
public void onResponse(Observation observation, Registration registration, ObserveResponse response) {
            if (LOG.isDebugEnabled()) {
                LOG.debug("Received notification from [{}] containing value [{}]", observation.getPath(),
                        response.getContent().toString());
            }

            if (registration != null) {
                String data = new StringBuilder("{\"ep\":\"").append(registration.getEndpoint()).append("\",\"res\":\"")
                        .append(observation.getPath().toString()).append("\",\"val\":")
                        .append(gson.toJson(response.getContent())).append("}").toString();

                sendEvent(EVENT_NOTIFICATION, data, registration.getEndpoint());
            }
}

response.getContent () содержит новое значение.Данные json, которые строит код, будут выглядеть как { "ep": "rpitest", "res": "/3334/0", "val": { "id": 0, "resources": [{ "id": 5704, "value": 1.7929173707962036 }, { "id": 5702, "value": 0.9917597770690918 }, { "id": 5703, "value": 154.53704833984375 }] } }

...