Skip to content

Commit

Permalink
Support registering server.
Browse files Browse the repository at this point in the history
To handle request received before register response.
  • Loading branch information
sbernard31 committed Apr 8, 2020
1 parent c0c13b5 commit 1c2844a
Showing 1 changed file with 17 additions and 0 deletions.
Expand Up @@ -16,10 +16,12 @@
package org.eclipse.leshan.client.engine;

import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService;
Expand Down Expand Up @@ -96,6 +98,7 @@ private static enum Status {
private final Map<String, String> additionalAttributes;
private final Map<Integer /* objectId */, LwM2mObjectEnabler> objectEnablers;
private final Map<String /* registrationId */, Server> registeredServers;
private final List<Server> registeringServers;
private final AtomicReference<Server> currentBoostrapServer;

// helpers
Expand Down Expand Up @@ -125,6 +128,7 @@ public DefaultRegistrationEngine(String endpoint, LwM2mObjectTree objectTree, En
this.observer = observer;
this.additionalAttributes = additionalAttributes;
this.registeredServers = new ConcurrentHashMap<>();
this.registeringServers = new CopyOnWriteArrayList<>();
this.currentBoostrapServer = new AtomicReference<>();
this.requestTimeoutInMs = requestTimeoutInMs;
this.deregistrationTimeoutInMs = deregistrationTimeoutInMs;
Expand Down Expand Up @@ -285,6 +289,7 @@ private Status register(Server server) throws InterruptedException {
if (observer != null) {
observer.onRegistrationStarted(server, request);
}
registeringServers.add(server);
RegisterResponse response = sender.send(server, request, requestTimeoutInMs);

if (response == null) {
Expand Down Expand Up @@ -321,6 +326,8 @@ private Status register(Server server) throws InterruptedException {
observer.onRegistrationFailure(server, request, null, null, e);
}
return Status.FAILURE;
} finally {
registeringServers.remove(server);
}
}

Expand Down Expand Up @@ -755,6 +762,11 @@ public Map<String, Server> getRegisteredServers() {

@Override
public Server getRegisteredServer(long serverId) {
for (Server server : registeringServers) {
if (server != null && server.getId() == serverId) {
return server;
}
}
for (Entry<String, Server> entry : registeredServers.entrySet()) {
Server server = entry.getValue();
if (server != null && server.getId() == serverId) {
Expand All @@ -772,6 +784,11 @@ public Server getServer(Identity identity) {
if (bootstrapServer != null && identity.equals(bootstrapServer.getIdentity())) {
return bootstrapServer;
} else {
for (Server server : registeringServers) {
if (identity.equals(server.getIdentity())) {
return server;
}
}
for (Server server : registeredServers.values()) {
if (identity.equals(server.getIdentity())) {
return server;
Expand Down

0 comments on commit 1c2844a

Please sign in to comment.