All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.leshan.server.LwM2mServer Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 * Copyright (c) 2013-2015 Sierra Wireless and others.
 * 
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * and Eclipse Distribution License v1.0 which accompany this distribution.
 * 
 * The Eclipse Public License is available at
 *    http://www.eclipse.org/legal/epl-v10.html
 * and the Eclipse Distribution License is available at
 *    http://www.eclipse.org/org/documents/edl-v10.html.
 * 
 * Contributors:
 *     Sierra Wireless - initial API and implementation
 *******************************************************************************/
package org.eclipse.leshan.server;

import org.eclipse.leshan.core.node.codec.CodecException;
import org.eclipse.leshan.core.request.DownlinkRequest;
import org.eclipse.leshan.core.request.exception.ClientSleepingException;
import org.eclipse.leshan.core.request.exception.InvalidResponseException;
import org.eclipse.leshan.core.request.exception.RequestCanceledException;
import org.eclipse.leshan.core.request.exception.RequestRejectedException;
import org.eclipse.leshan.core.request.exception.TimeoutException;
import org.eclipse.leshan.core.response.ErrorCallback;
import org.eclipse.leshan.core.response.LwM2mResponse;
import org.eclipse.leshan.core.response.ResponseCallback;
import org.eclipse.leshan.server.model.LwM2mModelProvider;
import org.eclipse.leshan.server.observation.ObservationService;
import org.eclipse.leshan.server.queue.PresenceListener;
import org.eclipse.leshan.server.queue.PresenceService;
import org.eclipse.leshan.server.registration.Registration;
import org.eclipse.leshan.server.registration.RegistrationService;
import org.eclipse.leshan.server.security.SecurityStore;

/**
 * An OMA Lightweight M2M device management server.
 *
 * Will receive client registration through the "/rd" resource. Is able to send requests (Read, Write, Create, Delete,
 * Execute, Discover, Observer) to specified clients.
 *
 * It's your main entry point for using the Leshan-core API.
 */
public interface LwM2mServer {

    /**
     * Starts the server (bind port, start to listen CoAP messages).
     */
    void start();

    /**
     * Stops the server, i.e. unbinds it from all ports. Frees as much system resources as possible to still be able to
     * be started.
     */
    void stop();

    /**
     * Destroys the server, i.e. unbinds from all ports and frees all system resources.
     */
    void destroy();

    /**
     * Sends a Lightweight M2M request synchronously. Will block until a response is received from the remote client.
     * 
     * @param destination the remote client
     * @param request the request to the client
     * @return the response or null if the CoAP timeout expires ( see
     *         http://tools.ietf.org/html/rfc7252#section-4.2 ).
     * 
     * @throws CodecException if request payload can not be encoded.
     * @throws InterruptedException if the thread was interrupted.
     * @throws RequestRejectedException if the request is rejected by foreign peer.
     * @throws RequestCanceledException if the request is cancelled.
     * @throws InvalidResponseException if the response received is malformed.
     * @throws ClientSleepingException if the client is sleeping and then the request cannot be sent. This exception
     *         will never be raised if Queue Mode support is deactivate.
     */
     T send(Registration destination, DownlinkRequest request)
            throws InterruptedException, CodecException, InvalidResponseException, RequestCanceledException,
            RequestRejectedException, ClientSleepingException;

    /**
     * Sends a Lightweight M2M request synchronously. Will block until a response is received from the remote client.
     * 
     * @param destination the remote client
     * @param request the request to send to the client
     * @param timeout the request timeout in millisecond
     * @return the response or null if the timeout expires (given parameter or CoAP timeout).
     * 
     * @throws CodecException if request payload can not be encoded.
     * @throws InterruptedException if the thread was interrupted.
     * @throws RequestRejectedException if the request is rejected by foreign peer.
     * @throws RequestCanceledException if the request is cancelled.
     * @throws InvalidResponseException if the response received is malformed.
     * @throws ClientSleepingException if the client is sleeping and then the request cannot be sent. This exception
     *         will never be raised if Queue Mode support is deactivate.
     */
     T send(Registration destination, DownlinkRequest request, long timeout)
            throws InterruptedException, CodecException, InvalidResponseException, RequestCanceledException,
            RequestRejectedException, ClientSleepingException;

    /**
     * Sends a Lightweight M2M request asynchronously.
     * 
     * @param destination the remote client
     * @param request the request to send to the client
     * @param responseCallback a callback called when a response is received (successful or error response)
     * @param errorCallback a callback called when an error or exception occurred when response is received. It can be :
     *        
    *
  • {@link RequestRejectedException} if the request is rejected by foreign peer.
  • *
  • {@link RequestCanceledException} if the request is cancelled.
  • *
  • {@link InvalidResponseException} if the response received is malformed.
  • *
  • {@link TimeoutException} if the CoAP timeout expires ( see * http://tools.ietf.org/html/rfc7252#section-4.2 ).
  • *
  • or any other RuntimeException for unexpected issue. *
* @throws CodecException if request payload can not be encoded. * @throws ClientSleepingException if the client is sleeping and then the request cannot be sent. This exception * will never be raised if Queue Mode support is deactivate. */ void send(Registration destination, DownlinkRequest request, ResponseCallback responseCallback, ErrorCallback errorCallback) throws CodecException, ClientSleepingException; /** * Sends a Lightweight M2M request asynchronously. * * @param destination the remote client * @param request the request to send to the client * @param timeout the request timeout in millisecond * @param responseCallback a callback called when a response is received (successful or error response) * @param errorCallback a callback called when an error or exception occurred when response is received. It can be : *
    *
  • {@link RequestRejectedException} if the request is rejected by foreign peer.
  • *
  • {@link RequestCanceledException} if the request is cancelled.
  • *
  • {@link InvalidResponseException} if the response received is malformed.
  • *
  • {@link TimeoutException} if the CoAP timeout expires ( see * http://tools.ietf.org/html/rfc7252#section-4.2 ).
  • *
  • or any other RuntimeException for unexpected issue. *
* @throws CodecException if request payload can not be encoded. * @throws ClientSleepingException if the client is sleeping and then the request cannot be sent. This exception * will never be raised if Queue Mode support is deactivate. */ void send(Registration destination, DownlinkRequest request, long timeout, ResponseCallback responseCallback, ErrorCallback errorCallback) throws CodecException, ClientSleepingException; /** * Get the registration service to access to registered clients. You can use this object for listening client * registration lifecycle. */ RegistrationService getRegistrationService(); /** * Get the Observation service to access current observations. You can use this object for listening resource * observation or cancel it. */ ObservationService getObservationService(); /** * Get the Presence service to get the status of LWM2M clients connected with binding mode 'Q'. You can use this * object to add {@link PresenceListener} to get notified when a device comes online or offline. */ PresenceService getPresenceService(); /** * Get the SecurityStore containing of security information. */ SecurityStore getSecurityStore(); /** * Get the provider in charge of retrieving the object definitions for each client. */ LwM2mModelProvider getModelProvider(); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy