Skip to content

Commit

Permalink
eclipse-leshan#933: Set an unexpected error hook to destroy the demo …
Browse files Browse the repository at this point in the history
…client

And implements `Destroyable` interface for each threading task that
runs with the demo client application.
The reason why it doesn't set the hook at `LeshanClient` is to keep
the backward compatibility, this means it delegates "what should client
do once an unexpected error has occurred" to the users.

Signed-off-by: moznion <[email protected]>
  • Loading branch information
moznion committed Dec 8, 2020
1 parent 1a8fecb commit c918c93
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
import org.eclipse.leshan.client.californium.LeshanClientBuilder;
import org.eclipse.leshan.client.engine.DefaultRegistrationEngineFactory;
import org.eclipse.leshan.client.object.Server;
import org.eclipse.leshan.client.observer.LwM2mClientObserverAdapter;
import org.eclipse.leshan.client.resource.LwM2mObjectEnabler;
import org.eclipse.leshan.client.resource.ObjectsInitializer;
import org.eclipse.leshan.client.resource.listener.ObjectsListenerAdapter;
Expand Down Expand Up @@ -691,6 +692,7 @@ public void objectAdded(LwM2mObjectEnabler object) {
LOG.info("Object {} enabled.", object.getId());
}
});
client.addObserver(new ShutdownOnUnexpectedErrorObserver(client));

// Display client public key to easily add it in demo servers.
if (clientPublicKey != null) {
Expand Down Expand Up @@ -807,4 +809,18 @@ public void run() {
}
}
}

private static class ShutdownOnUnexpectedErrorObserver extends LwM2mClientObserverAdapter {
final LeshanClient client;

public ShutdownOnUnexpectedErrorObserver(final LeshanClient client) {
this.client = client;
}

@Override
public void onUnexpectedError(Throwable unexpectedError) {
LOG.error("unexpected error occurred. destroy the leshan-client", unexpectedError);
client.destroy(true);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

import org.eclipse.leshan.client.resource.BaseInstanceEnabler;
import org.eclipse.leshan.client.servers.ServerIdentity;
import org.eclipse.leshan.core.Destroyable;
import org.eclipse.leshan.core.model.ObjectModel;
import org.eclipse.leshan.core.model.ResourceModel.Type;
import org.eclipse.leshan.core.node.LwM2mResource;
Expand All @@ -23,17 +24,19 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyDevice extends BaseInstanceEnabler {
public class MyDevice extends BaseInstanceEnabler implements Destroyable {

private static final Logger LOG = LoggerFactory.getLogger(MyDevice.class);

private static final Random RANDOM = new Random();
private static final List<Integer> supportedResources = Arrays.asList(0, 1, 2, 3, 9, 10, 11, 13, 14, 15, 16, 17, 18,
19, 20, 21);

private final Timer timer;

public MyDevice() {
// notify new date each 5 second
Timer timer = new Timer("Device-Current Time");
timer = new Timer("Device-Current Time");
timer.schedule(new TimerTask() {
@Override
public void run() {
Expand Down Expand Up @@ -209,4 +212,9 @@ private long getMemoryTotal() {
public List<Integer> getAvailableResourceIds(ObjectModel model) {
return supportedResources;
}

@Override
public void destroy() {
timer.cancel();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,15 @@

import org.eclipse.leshan.client.resource.BaseInstanceEnabler;
import org.eclipse.leshan.client.servers.ServerIdentity;
import org.eclipse.leshan.core.Destroyable;
import org.eclipse.leshan.core.model.ObjectModel;
import org.eclipse.leshan.core.response.ExecuteResponse;
import org.eclipse.leshan.core.response.ReadResponse;
import org.eclipse.leshan.core.util.NamedThreadFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class RandomTemperatureSensor extends BaseInstanceEnabler {
public class RandomTemperatureSensor extends BaseInstanceEnabler implements Destroyable {

private static final Logger LOG = LoggerFactory.getLogger(RandomTemperatureSensor.class);

Expand Down Expand Up @@ -113,4 +114,9 @@ private void resetMinMaxMeasuredValues() {
public List<Integer> getAvailableResourceIds(ObjectModel model) {
return supportedResources;
}

@Override
public void destroy() {
scheduler.shutdown();
}
}

0 comments on commit c918c93

Please sign in to comment.