Riferimenti per la classe org.jaebi.midlet.bt.ConnectionSet

Diagramma delle classi per org.jaebi.midlet.bt.ConnectionSet

Inheritance graph
[legenda]
Diagramma di collaborazione per org.jaebi.midlet.bt.ConnectionSet:

Collaboration graph
[legenda]
Lista di tutti i membri.

Descrizione Dettagliata

Questa classe rappresenta un Container delle connessioni effettuate ad una Server Midlet.

E' un observable che notifica ai suoi observer l'aggiunta o la rimozione di una connessione.

L'istanza di questa classe potrebbe rappresentare una regione critica per l'accesso concorrente che vi fanno il thread lanciato da BtServer e il thread lanciato da ClientProcessor. Dichiarando alcuni metodi come synchronized si garantisce la mutua esclusione ad essi e si evitano, quindi, possibili race conditions (un possibile scenario in cui si potrebbe avere una race condition è il seguente: ConnectionProcessor thread rimuove una connessione per un errore di IO e concorrenzialmente BtServer falseil get di quella stessa connessione

Autore:
Antonio

Definizione alla linea 35 del file ConnectionSet.java.

Membri pubblici

 ConnectionSet (ConnectionObserver observer)
 Creates a new instance of ConnectionSet.
synchronized void addConnection (StreamConnection conn)
synchronized void removeConnection (StreamConnection conn)
synchronized StreamConnection getConnection (int index)
synchronized StreamConnection[] getConnection (RemoteDevice rd)
 Ritrova le connessioni relative ad una certa remote device.
synchronized int connectionsCount ()
 ritorna il numero di connessioni non pendenti
synchronized void closeAll () throws BtIOException
 Chiude tutte le connessioni del set e svuota il Vector connections.
synchronized void addObserver (Observer o)
 Aggiunge un nuovo Observer all'insieme di Observer per questo oggetto, a patto che l'Observer che si sta inserendo non sia già prensente nell'insieme.
synchronized void deleteObserver (Observer o)
 Elimina un Observer dal'insieme.
void notifyObservers ()
 Se l'oggetto è cambiato (hasChanged() ritorna true), notifica tale cambiamento agli obervers effettuando la chiamata al loro metodo update).
void notifyObservers (Object arg)
 Se l'oggetto è cambiato (hasChanged() ritorna true), notifica tale cambiamento agli obervers effettuando la chiamata al loro metodo update.
synchronized void deleteObservers ()
 effettua il clear della lista degli observers
synchronized boolean hasChanged ()
 Verifica se l'oggetto è cambiato.
synchronized int countObservers ()
 Ritorna il numero di observer per questo oggetto.

Membri protetti

synchronized void setChanged ()
 Marca questo oggetto Observable come changed.
synchronized void clearChanged ()
 Indica che gli observer sono stati notificati dell'ultimo cambiamento.

Attributi privati

Vector connections
int event


Documentazione dei costruttori e dei distruttori

org.jaebi.midlet.bt.ConnectionSet.ConnectionSet ConnectionObserver  observer  ) 
 

Creates a new instance of ConnectionSet.

Definizione alla linea 41 del file ConnectionSet.java.

Riferimenti org.jaebi.midlet.bt.ConnectionSet.connections.

00041                                                       {
00042         connections = new Vector();
00043         this.addObserver((Observer)observer);
00044     }


Documentazione delle funzioni membro

synchronized void org.jaebi.midlet.bt.ConnectionSet.addConnection StreamConnection  conn  ) 
 

Definizione alla linea 47 del file ConnectionSet.java.

Riferimenti org.jaebi.midlet.bt.ConnectionSet.connections, org.jaebi.midlet.bt.ConnectionSet.event, e org.jaebi.midlet.util.Observable.notifyObservers().

Referenziato da org.jaebi.midlet.bt.BtServer.run().

00047                                                                  {
00048         ConnectionEvent event = new ConnectionEvent(ConnectionEvent.CONNECTION_ADDED, conn);
00049         
00050         connections.addElement(conn);
00051         this.setChanged();
00052         notifyObservers(event);
00053     }

Questo è il grafo delle chiamate per questa funzione:

synchronized void org.jaebi.midlet.util.Observable.addObserver Observer  o  )  [inherited]
 

Aggiunge un nuovo Observer all'insieme di Observer per questo oggetto, a patto che l'Observer che si sta inserendo non sia già prensente nell'insieme.

Il metodo è dichiarato synchronized per evitare che, nel caso di multithreading, si verifichino race conditions che portino ad inserire ugualmente due volte lo stesso Observer

Parametri:
o an observer to be added.
Eccezioni:
NullPointerException if the parameter o is null.

Definizione alla linea 39 del file Observable.java.

Riferimenti org.jaebi.midlet.util.Observable.obs.

00039                                                      {
00040         if (o == null)
00041             throw new NullPointerException();
00042         if (!obs.contains(o)) {
00043             obs.addElement(o);
00044         }
00045     }

synchronized void org.jaebi.midlet.util.Observable.clearChanged  )  [protected, inherited]
 

Indica che gli observer sono stati notificati dell'ultimo cambiamento.

il metodo hasChanged ora ritornerà false. Questo metodo è chiamato automaticamente dal metodo notifyObservers.

Vedi anche:
org.jaebi.client.midlet.util.Observable.notifyObservers()

org.jaebi.client.midlet.util.Observable.notifyObservers(java.lang.Object)

Definizione alla linea 136 del file Observable.java.

Riferimenti org.jaebi.midlet.util.Observable.changed.

Referenziato da org.jaebi.midlet.util.Observable.notifyObservers().

00136                                                {
00137         changed = false;
00138     }

synchronized void org.jaebi.midlet.bt.ConnectionSet.closeAll  )  throws BtIOException
 

Chiude tutte le connessioni del set e svuota il Vector connections.

Definizione alla linea 123 del file ConnectionSet.java.

Riferimenti org.jaebi.midlet.bt.ConnectionSet.connections.

00123                                                             {
00124         Enumeration en;
00125         en = connections.elements();
00126         while(en.hasMoreElements()){
00127             try{
00128                 ((StreamConnection)en.nextElement()).close();
00129             } catch(IOException e){
00130                 throw new BtIOException();
00131             }
00132         }
00133         connections.removeAllElements();
00134     }

synchronized int org.jaebi.midlet.bt.ConnectionSet.connectionsCount  ) 
 

ritorna il numero di connessioni non pendenti

Definizione alla linea 116 del file ConnectionSet.java.

Riferimenti org.jaebi.midlet.bt.ConnectionSet.connections.

00116                                               {
00117         return connections.size();
00118     }

synchronized int org.jaebi.midlet.util.Observable.countObservers  )  [inherited]
 

Ritorna il numero di observer per questo oggetto.

Restituisce:
il numero di observer per questo oggetto.

Definizione alla linea 159 del file Observable.java.

Riferimenti org.jaebi.midlet.util.Observable.obs.

00159                                              {
00160         return obs.size();
00161     }

synchronized void org.jaebi.midlet.util.Observable.deleteObserver Observer  o  )  [inherited]
 

Elimina un Observer dal'insieme.

Parametri:
o the observer to be deleted.

Definizione alla linea 52 del file Observable.java.

Riferimenti org.jaebi.midlet.util.Observable.obs.

00052                                                         {
00053         obs.removeElement(o);
00054     }

synchronized void org.jaebi.midlet.util.Observable.deleteObservers  )  [inherited]
 

effettua il clear della lista degli observers

Definizione alla linea 116 del file Observable.java.

Riferimenti org.jaebi.midlet.util.Observable.obs.

00116                                                {
00117         obs.removeAllElements();
00118     }

synchronized StreamConnection [] org.jaebi.midlet.bt.ConnectionSet.getConnection RemoteDevice  rd  ) 
 

Ritrova le connessioni relative ad una certa remote device.

Definizione alla linea 78 del file ConnectionSet.java.

Riferimenti org.jaebi.midlet.bt.ConnectionSet.connections.

00078                                                                          {
00079         Vector outTemp = new Vector();
00080         StreamConnection out[];
00081         Enumeration en = connections.elements();
00082         
00083         while (en.hasMoreElements()){
00084             StreamConnection conn = (StreamConnection)en.nextElement();
00085             RemoteDevice temp = null;
00086             
00087             try{
00088                 temp = RemoteDevice.getRemoteDevice(conn);
00089                 if (temp.equals(conn))
00090                     outTemp.addElement(conn);
00091             } 
00092             catch(IOException e){
00093                 ;
00094                 /* non faccio nulla perchè non posso compromettere la ricerca se 
00095                  * per una certa connessione non riesco a recuperare la 
00096                  * remoteDevice
00097                  */
00098             }
00099 
00100         }
00101         
00102         out = new StreamConnection[outTemp.size()];
00103         
00104         for (int i=0; i<outTemp.size(); i++){
00105             out[i] = (StreamConnection)outTemp.elementAt(i);
00106         }
00107         
00108         outTemp.removeAllElements();
00109         return out;
00110     }

synchronized StreamConnection org.jaebi.midlet.bt.ConnectionSet.getConnection int  index  ) 
 

Definizione alla linea 71 del file ConnectionSet.java.

Riferimenti org.jaebi.midlet.bt.ConnectionSet.connections.

00071                                                                  {
00072         return (StreamConnection)connections.elementAt(index);
00073     }

synchronized boolean org.jaebi.midlet.util.Observable.hasChanged  )  [inherited]
 

Verifica se l'oggetto è cambiato.

Restituisce:
true se e solo se il metodo setChanged è stato chiamato più recetemente di quando è stato chiamato clearChanged su quest'oggetto; false altrimenti.
Vedi anche:
org.jaebi.client.midlet.util.Observable.clearChanged()

org.jaebi.client.midlet.util.Observable.setChanged()

Definizione alla linea 150 del file Observable.java.

Riferimenti org.jaebi.midlet.util.Observable.changed.

00150                                              {
00151         return changed;
00152     }

void org.jaebi.midlet.util.Observable.notifyObservers Object  arg  )  [inherited]
 

Se l'oggetto è cambiato (hasChanged() ritorna true), notifica tale cambiamento agli obervers effettuando la chiamata al loro metodo update.

Una volta effettuata la notifica, viene chiamato il metodo clearChanged per indicare che l'oggetto non è più cambiato dall'ultima notifica.

Parametri:
arg any object.
Vedi anche:
org.jaebi.client.midlet.util.Observable.clearChanged()

org.jaebi.client.midlet.util.Observable.hasChanged()

org.jaebi.client.midlet.util.Observer.update(java.util.Observable, java.lang.Object)

Definizione alla linea 80 del file Observable.java.

Riferimenti org.jaebi.midlet.util.Observable.changed, org.jaebi.midlet.util.Observable.clearChanged(), e org.jaebi.midlet.util.Observable.obs.

00080                                             {
00081         /*
00082          *Collezione degli observer usata come snapshot dello stato degli observer correnti
00083          */
00084         Enumeration observers;
00085         
00086         synchronized (this) {
00087             /*
00088              * Il codice incaricato di estrarre la lista degli observer da notificare
00089              * necessita di sincronizzazione ma la notifica vera e propria no (non dovrebbe)
00090              * Il peggior risultato di una qualsiasi race-condition che possa verificarsi qui (in assenza di sincronizzazione
00091              *  è il seguente:
00092              * 1) a newly-added Observer will miss a
00093              *   notification in progress: siccome anche il metododo addObserver() è
00094              *   dichiarato sinchronized non può verificarsi che un flusso di controllo aggiunga un nuovo observer
00095              *   mentre un altro sta recuperando la lista degli observer per effettuare la notifica
00096              * 2) a recently unregistered Observer will be
00097              *   wrongly notified when it doesn't care: non può verificarsi che un flusso di controllo
00098              *   stia rimuovendo un observer mentre un altro sta recuperando
00099              *   la lista delgi observer a cui inviare la notifica (il metodo deleteObserver() è dichiarato anch'esso
00100              *   synchronized
00101              */
00102             if (!changed)
00103                 return;
00104             observers = obs.elements();
00105             clearChanged();
00106         }
00107         
00108         while (observers.hasMoreElements())
00109             ((Observer)observers.nextElement()).update(this, arg);
00110            
00111     }

Questo è il grafo delle chiamate per questa funzione:

void org.jaebi.midlet.util.Observable.notifyObservers  )  [inherited]
 

Se l'oggetto è cambiato (hasChanged() ritorna true), notifica tale cambiamento agli obervers effettuando la chiamata al loro metodo update).

Una volta effettuata la notifica, viene chiamato il metodo clearChanged per indicare che l'oggetto non è più cambiato dall'ultima notifica.

Vedi anche:
org.jaebi.client.midlet.util.Observable.clearChanged()

org.jaebi.client.midlet.util.Observable.hasChanged()

org.jaebi.client.midlet.util.Observer.update(java.util.Observable, java.lang.Object)

Definizione alla linea 65 del file Observable.java.

Referenziato da org.jaebi.midlet.bt.ConnectionSet.addConnection(), org.jaebi.midlet.bt.ConnectionSet.removeConnection(), org.jaebi.midlet.bt.Discoverer.run(), org.jaebi.midlet.bt.Discoverer.searchServices(), e org.jaebi.midlet.bt.Discoverer.serviceSearchCompleted().

00065                                   {
00066         notifyObservers(null);
00067     }

synchronized void org.jaebi.midlet.bt.ConnectionSet.removeConnection StreamConnection  conn  ) 
 

Definizione alla linea 56 del file ConnectionSet.java.

Riferimenti org.jaebi.midlet.bt.ConnectionSet.connections, org.jaebi.midlet.bt.ConnectionSet.event, e org.jaebi.midlet.util.Observable.notifyObservers().

00056                                                                     {
00057         ConnectionEvent event = new ConnectionEvent(ConnectionEvent.CONNECTION_REMOVED, conn);
00058         
00059         try{
00060             conn.close();
00061         } catch (IOException e){
00062             System.err.println("Errore durante la chiusura della connessione");
00063         }
00064         
00065         connections.removeElement(conn);
00066         this.setChanged();
00067         notifyObservers(event);
00068         
00069     }

Questo è il grafo delle chiamate per questa funzione:

synchronized void org.jaebi.midlet.util.Observable.setChanged  )  [protected, inherited]
 

Marca questo oggetto Observable come changed.

Definizione alla linea 123 del file Observable.java.

Riferimenti org.jaebi.midlet.util.Observable.changed.

Referenziato da org.jaebi.midlet.bt.Discoverer.setState().

00123                                              {
00124         changed = true;
00125     }


Documentazione dei dati membri

Vector org.jaebi.midlet.bt.ConnectionSet.connections [private]
 

Definizione alla linea 37 del file ConnectionSet.java.

Referenziato da org.jaebi.midlet.bt.ConnectionSet.addConnection(), org.jaebi.midlet.bt.ConnectionSet.closeAll(), org.jaebi.midlet.bt.ConnectionSet.connectionsCount(), org.jaebi.midlet.bt.ConnectionSet.ConnectionSet(), org.jaebi.midlet.bt.ConnectionSet.getConnection(), e org.jaebi.midlet.bt.ConnectionSet.removeConnection().

int org.jaebi.midlet.bt.ConnectionSet.event [private]
 

Definizione alla linea 38 del file ConnectionSet.java.

Referenziato da org.jaebi.midlet.bt.ConnectionSet.addConnection(), e org.jaebi.midlet.bt.ConnectionSet.removeConnection().


La documentazione per questa classe è stata generata a partire dal seguente file:
Generato il Thu Jun 23 00:03:02 2005 per JAEBI - BlueTooth J2ME Midlet Client da  doxygen 1.4.3