Skip to content

Commit

Permalink
Create a new RequestSender Utility class, use it for server and bsserver
Browse files Browse the repository at this point in the history
  • Loading branch information
sbernard31 committed Nov 14, 2019
1 parent f3d3079 commit d990528
Show file tree
Hide file tree
Showing 3 changed files with 303 additions and 278 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,7 @@
*******************************************************************************/
package org.eclipse.leshan.server.californium.bootstrap;

import org.eclipse.californium.core.coap.MessageObserver;
import org.eclipse.californium.core.coap.Request;
import org.eclipse.californium.core.coap.Response;
import org.eclipse.californium.core.network.Endpoint;
import org.eclipse.leshan.core.californium.AsyncRequestObserver;
import org.eclipse.leshan.core.californium.SyncRequestObserver;
import org.eclipse.leshan.core.model.LwM2mModel;
import org.eclipse.leshan.core.node.codec.LwM2mNodeDecoder;
import org.eclipse.leshan.core.node.codec.LwM2mNodeEncoder;
Expand All @@ -30,88 +25,35 @@
import org.eclipse.leshan.core.response.LwM2mResponse;
import org.eclipse.leshan.core.response.ResponseCallback;
import org.eclipse.leshan.server.bootstrap.LwM2mBootstrapRequestSender;
import org.eclipse.leshan.server.californium.request.CoapRequestBuilder;
import org.eclipse.leshan.server.californium.request.LwM2mResponseBuilder;
import org.eclipse.leshan.server.californium.request.RequestSender;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class CaliforniumLwM2mBootstrapRequestSender implements LwM2mBootstrapRequestSender {

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

private final Endpoint nonSecureEndpoint;
private final Endpoint secureEndpoint;
private final LwM2mModel model;
private final LwM2mNodeDecoder decoder;
private final LwM2mNodeEncoder encoder;

private final RequestSender sender;

public CaliforniumLwM2mBootstrapRequestSender(Endpoint secureEndpoint, Endpoint nonSecureEndpoint, LwM2mModel model,
LwM2mNodeEncoder encoder, LwM2mNodeDecoder decoder) {
this.secureEndpoint = secureEndpoint;
this.nonSecureEndpoint = nonSecureEndpoint;
this.model = model;
this.encoder = encoder;
this.decoder = decoder;
this.sender = new RequestSender(secureEndpoint, nonSecureEndpoint, encoder, decoder);
}

@Override
public <T extends LwM2mResponse> T send(final String endpointName, final Identity destination,
final DownlinkRequest<T> request, long timeout) throws InterruptedException { // Create the CoAP request
// from LwM2m request
CoapRequestBuilder coapClientRequestBuilder = new CoapRequestBuilder(destination, model, encoder);
request.accept(coapClientRequestBuilder);

final Request coapRequest = coapClientRequestBuilder.getRequest();

// Send CoAP request synchronously
SyncRequestObserver<T> syncMessageObserver = new SyncRequestObserver<T>(coapRequest, timeout) {
@Override
public T buildResponse(Response coapResponse) {
// Build LwM2m response
LwM2mResponseBuilder<T> lwm2mResponseBuilder = new LwM2mResponseBuilder<>(coapRequest, coapResponse,
endpointName, model, decoder);
request.accept(lwm2mResponseBuilder);
return lwm2mResponseBuilder.getResponse();
}
};
coapRequest.addMessageObserver(syncMessageObserver);

// Send CoAP request asynchronously
if (destination.isSecure())
secureEndpoint.sendRequest(coapRequest);
else
nonSecureEndpoint.sendRequest(coapRequest);

// Wait for response, then return it
return syncMessageObserver.waitForResponse();
final DownlinkRequest<T> request, long timeout) throws InterruptedException {
return sender.sendLwm2mRequest(endpointName, destination, null, model, null, request, timeout);
}

@Override
public <T extends LwM2mResponse> void send(final String endpointName, final Identity destination,
final DownlinkRequest<T> request, final long timeout, ResponseCallback<T> responseCallback,
ErrorCallback errorCallback) {
// Create the CoAP request from LwM2m request
CoapRequestBuilder coapClientRequestBuilder = new CoapRequestBuilder(destination, model, encoder);
request.accept(coapClientRequestBuilder);
final Request coapRequest = coapClientRequestBuilder.getRequest();

// Add CoAP request callback
MessageObserver obs = new AsyncRequestObserver<T>(coapRequest, responseCallback, errorCallback, timeout) {
@Override
public T buildResponse(Response coapResponse) {
// Build LwM2m response
LwM2mResponseBuilder<T> lwm2mResponseBuilder = new LwM2mResponseBuilder<>(coapRequest, coapResponse,
endpointName, model, decoder);
request.accept(lwm2mResponseBuilder);
return lwm2mResponseBuilder.getResponse();
}
};
coapRequest.addMessageObserver(obs);

// Send CoAP request asynchronously
if (destination.isSecure())
secureEndpoint.sendRequest(coapRequest);
else
nonSecureEndpoint.sendRequest(coapRequest);
sender.sendLwm2mRequest(endpointName, destination, null, model, null, request, timeout, responseCallback,
errorCallback);
}
}
Loading

0 comments on commit d990528

Please sign in to comment.