use of org.eclipse.leshan.server.observation.ObservationListener in project leshan by eclipse.
the class ObservationServiceImpl method onNotification.
// ********** NotificationListener interface **********//
@Override
public void onNotification(Request coapRequest, Response coapResponse) {
LOG.trace("notification received for request {}: {}", coapRequest, coapResponse);
if (listeners.isEmpty())
return;
// get registration Id
String regid = coapRequest.getUserContext().get(ObserveUtil.CTX_REGID);
// get observation for this request
Observation observation = registrationStore.getObservation(regid, coapResponse.getToken().getBytes());
if (observation == null) {
LOG.error("Unexpected error: Unable to find observation with token {} for registration {}", coapResponse.getToken(), regid);
return;
}
// get registration
Registration registration = registrationStore.getRegistration(observation.getRegistrationId());
if (registration == null) {
LOG.error("Unexpected error: There is no registration with id {} for this observation {}", observation.getRegistrationId(), observation);
return;
}
try {
// get model for this registration
LwM2mModel model = modelProvider.getObjectModel(registration);
// create response
ObserveResponse response = createObserveResponse(observation, model, coapResponse);
// notify all listeners
for (ObservationListener listener : listeners) {
listener.onResponse(observation, registration, response);
}
} catch (InvalidResponseException e) {
if (LOG.isDebugEnabled()) {
LOG.debug(String.format("Invalid notification for observation [%s]", observation), e);
}
for (ObservationListener listener : listeners) {
listener.onError(observation, registration, e);
}
} catch (RuntimeException e) {
if (LOG.isErrorEnabled()) {
LOG.error(String.format("Unable to handle notification for observation [%s]", observation), e);
}
for (ObservationListener listener : listeners) {
listener.onError(observation, registration, e);
}
}
}
Aggregations