Pagina Principale   Moduli   Lista dei namespaces   Gerarchia delle classi   Lista in ordine alfabetico   Lista dei composti   Lista dei files   Membri dei namespaces   Membri dei composti   Membri dei files   Esempi  

Riferimenti per la classe fbfs::NameServer_i

Dato l'Obj_id di un oggetto cerca di restituire l'URI dell'ObjectManager che lo gestisce. Continua...

#include <NameServer_i.h>

Diagramma delle classi per fbfs::NameServer_i

Inheritance graph
[legenda]
Diagramma di interrelazione per fbfs::NameServer_i:

Collaboration graph
[legenda]
Lista di tutti i membri.

Membri pubblici

 NameServer_i (utils::Prefs &prefs, const CORBA::ORB_ptr &orb)
 Invocato al momento della creazione dell'oggetto sigleton utilizzato dal server CORBA. Continua...

virtual ~NameServer_i ()
 Invocato alla chiusura del server. Continua...

char* lookup (const Security &cert, const Obj_id &id) throw (NotFound, SecurityException, InternalError)
 Restituisce l'URI del FileServer che gestisce l'oggetto che ha un determinato Obj_id. Continua...


Descrizione Dettagliata

Dato l'Obj_id di un oggetto cerca di restituire l'URI dell'ObjectManager che lo gestisce.

Realizza il meccanismo di gestione del sistema di nomi. Questa implementazione prevede l'utilizzo di un linguaggio di definizione delle regole di ricerca e l'utilizzo eventuale di altri NameServer.

Definizione alla linea 48 del file NameServer_i.h.


Documentazione dei costruttori e dei distruttori

fbfs::NameServer_i::NameServer_i ( utils::Prefs & prefs,
const CORBA::ORB_ptr & orb )
 

Invocato al momento della creazione dell'oggetto sigleton utilizzato dal server CORBA.

Qui è inizializzato lo stato del server.

Definizione alla linea 32 del file NameServer_i.cc.

00032                                                               : prefs(p), orb(o) {
00033     string rulefile = p.get("rulefile","nameserver-rules");
00034 
00035     ifstream::ifstream s;
00036     s.open(rulefile.c_str());
00037     char buf[80];
00038     while(!s.eof()) {
00039         s.getline(buf,80);
00040         string s(buf);
00041         if(s.find("#")==0 || s.length() < 3)
00042             continue;
00043         int level = 0;
00044         while(s[level++]==' ');
00045         level--;
00046         string line = s.substr(level,s.length()-level);
00047         int i;
00048         i = line.find(" ");
00049         string command = line.substr(0,i);
00050         line = line.substr(i+1,line.length()-i-1);
00051         i = line.find(" ");
00052         string arg = line.substr(0,i);
00053 
00054         Rule r(level, command, arg);
00055         rules.push_back(r);
00056     };
00057 }

fbfs::NameServer_i::~NameServer_i ( ) [inline, virtual]
 

Invocato alla chiusura del server.

Definizione alla linea 59 del file NameServer_i.h.

00059                             {}


Documentazione delle funzioni membro

char * fbfs::NameServer_i::lookup ( const Security & cert,
const Obj_id & id ) throw (NotFound, SecurityException, InternalError)
 

Restituisce l'URI del FileServer che gestisce l'oggetto che ha un determinato Obj_id.

Parametri:
cert   certificato di sicurezza del richiedente.
id   identificativo dell'oggetto.
Restituisce:
stringa C-like con l'URI del NameServer che si occupa di Obj_id.
Eccezioni:
NotFound   non vi sono regole per risolvere il nome richiesto.
SecurityException   il richiedente non ha i diritti per ottenere il riferimento desiderato.
InternalError   il server non ha commesso un errore interno nel processare la richiesta.

Definizione alla linea 59 del file NameServer_i.cc.

00060                                                               {
00061     string name(id.name);
00062     string result;
00063     int level = 0;
00064     bool go_deeper = true;
00065     bool exit_now = false;
00066     vector<Rule>::iterator i;
00067     for(i=rules.begin(); i != rules.end(); i++) {
00068         if(i->level <= level || go_deeper) {
00069             level = i->level;
00070             switch( i->eval(name, result, orb) ) {
00071                 case Rule::FALSE:
00072                     go_deeper = false;
00073                     break;
00074                 case Rule::TRUE:
00075                     go_deeper = true;
00076                     break;
00077                 case Rule::OK:
00078                     return CORBA::string_dup(result.c_str());
00079                     break;
00080                 case Rule::NOTFOUND:
00081                     throw NotFound();
00082             };
00083         };
00084         if(exit_now)
00085             break;
00086     };
00087     throw NotFound();
00088 }


La documentazione per questa classe è stata generata a partire dai seguenti files:
Generato il Thu Feb 15 13:25:07 2001 per A Simple Distributed Object Repository with CORBA & C++. da doxygen1.2.3 scritto da Dimitri van Heesch, © 1997-2000