Skip to content

Commit

Permalink
eclipse-leshan#933: Add demo code to shutdown when an unexpected erro…
Browse files Browse the repository at this point in the history
…r has occurred

Signed-off-by: moznion <[email protected]>
  • Loading branch information
moznion committed Nov 30, 2020
1 parent 7e32bf5 commit e3aad0d
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,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 @@ -623,9 +624,11 @@ public static void createAndStartClient(String endpoint, String localAddress, in
initializer.setInstancesForObject(SERVER, new Server(123, lifetime));
}
}
initializer.setInstancesForObject(DEVICE, new MyDevice());
final MyDevice myDevice = new MyDevice();
final RandomTemperatureSensor randomTemperatureSensor = new RandomTemperatureSensor();
initializer.setInstancesForObject(DEVICE, myDevice);
initializer.setInstancesForObject(LOCATION, locationInstance);
initializer.setInstancesForObject(OBJECT_ID_TEMPERATURE_SENSOR, new RandomTemperatureSensor());
initializer.setInstancesForObject(OBJECT_ID_TEMPERATURE_SENSOR, randomTemperatureSensor);
List<LwM2mObjectEnabler> enablers = initializer.createAll();

// Create CoAP Config
Expand Down Expand Up @@ -745,6 +748,9 @@ public void handshakeFailed(Handshaker handshaker, Throwable error) {
builder.setBootstrapAdditionalAttributes(bsAdditionalAttributes);
final LeshanClient client = builder.build();

client.addObserver(
new ClientShutdownOnUnexpectedErrorObserver(client, myDevice, randomTemperatureSensor));

client.getObjectTree().addListener(new ObjectsListenerAdapter() {
@Override
public void objectRemoved(LwM2mObjectEnabler object) {
Expand Down Expand Up @@ -872,4 +878,28 @@ public void run() {
}
}
}

private static class ClientShutdownOnUnexpectedErrorObserver extends LwM2mClientObserverAdapter {
final LeshanClient client;
final MyDevice myDevice;
final RandomTemperatureSensor randomTemperatureSensor;

public ClientShutdownOnUnexpectedErrorObserver(
final LeshanClient client,
final MyDevice myDevice,
final RandomTemperatureSensor randomTemperatureSensor
) {
this.client = client;
this.myDevice = myDevice;
this.randomTemperatureSensor = randomTemperatureSensor;
}

@Override
public void onUnexpectedErrorOccurred(Throwable unexpectedError) {
LOG.error("unexpected error occurred", unexpectedError);
client.destroy(true);
myDevice.destroy();
randomTemperatureSensor.destroy();
}
}
}
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");
this.timer = new Timer("Device-Current Time");
timer.schedule(new TimerTask() {
@Override
public void run() {
Expand Down Expand Up @@ -210,4 +213,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 e3aad0d

Please sign in to comment.