package profiles;

import java.util.Vector;

/**
 *
 * Il cuore del servizio. Incapsula lo strato sottostante (Bluetooth o
 * qualsiasi altra tecnologia di comunicazione) e fornisce le primitive
 * decessarie agli stati superiori.
 *
 * @author Lorenzo Moretti
 * @version 1.0
 */

public interface BasicService {
  /**
   * Ottiene un'elenco dei dispositivi nei paraggi di della propia perifarica.
   * @param d la propria periferica. Se vengono passati riferimenti ad altre
   * periferiche, il comportamento dipende dall'implementazione.
   * @return una lista di Device.
   */
  public Vector getDevicesInRange(Device d);

  /**
   * Ottiene una periferica nei pressi cercandola per nome.
   * @param id il nome della periferica cercata.
   * @return la periferica cercata, null se non č trovato niente.
   */
  public Device getDevice(String id);

  /**
   * Registra un'oggetto come listener di questo servizio. L'oggetto verrā
   * notificato di tutti i messaggi ricevuti.
   *
   * @param d il beneficiario del servizio.
   */
  public void registerListnerDevice(Device d);

  public Device getRegisteredListenerDevice();

  /**
   * Trasmette un messaggio. Il messaggio viene trasmesso al prossimo
   * nodo nella route del presente nel messaggio.
   * @see Message
   * @param msg il messaggio da trasmettere.
   */
  public void deliverMessage(Message msg);

  /**
   * Broadcast di un messaggio.
   * @param msg il messaggio.
   */
  public void bcast(Device dev, Message msg);

}