Horus Doc || Corba Reference || Corba   Client Server   Stubs C++   Stubs Java   Servant Generator  

HxServer Class Reference

The Horus server (singleton class). More...

#include <HxServer.h>

Inheritance diagram for HxServer::

HxServerBase List of all members.

Public Methods

 HxServer (int argc, char *argv[])
 Construct a server. More...

 HxServer (int port)
 Construct a simple (inprocess) server. More...

virtual ~HxServer ()
 Destructor. More...

virtual void run ()
virtual void message (const char *msg)
void shutdown (bool wait_for_completion=false)
void bindToNameServer (const char *name, const char *nsAddress)
CORBA::Object_ptr getInitialObject (const char *name)
void addInitialObject (const char *name, PortableServer::Servant servant)
char * object_to_string (CORBA::Object_ptr obj)
CORBA::Object_ptr string_to_object (const char *ref)
PortableServer::POA_ptr getDataPOA ()
PortableServer::POA_ptr getRootPOA ()
PortableServer::POA_ptr getCurrentPOA ()
PortableServer::Servant getCurrentServant ()
PortableServer::ObjectId * getCurrentObjectId ()
virtual CORBA::Object_ptr registerServant (PortableServer::Servant srv)
virtual void unregisterServant (const PortableServer::ObjectId &oid)
virtual PortableServer::Servant getServant (CORBA::Object_ptr obj)
virtual HxCorba::RgbBuffer_ptr createRgbBuffer ()
virtual void setRgbBufferArray (HxCorba::RgbBuffer_ptr buf, int *array)

Static Public Methods

HxServer * instance ()
 Get the one and only Horus server. More...


Protected Methods

void init (int argc, char *argv[])

Protected Attributes

CORBA::ORB_ptr _orb
PortableServer::POA_var _rootPOA
PortableServer::POA_var _dataPOA
PortableServer::POA_var _initialPOA
OB::BootManager_var _bootMgr
PortableServer::Current_var _poaCurrent
std::list< HxNSBinding *> _nsBindings

Detailed Description

The Horus server (singleton class).


Constructor & Destructor Documentation

HxServer::HxServer int    argc,
char *    argv[]
 

Construct a server.

00033                                          : _silent(0)
00034 {
00035     _inst = this;
00036     init(argc, argv);
00037 }

HxServer::HxServer int    port
 

Construct a simple (inprocess) server.

00039                            : _silent(1)
00040 {
00041     if(port != -1) {
00042         char strport[20];
00043         sprintf(strport, "%d", port);
00044 
00045         OB::Properties_var properties = OB::Properties::getDefaultProperties();
00046         properties -> setProperty("ooc.orb.oa.port", strport);
00047     }
00048 
00049     char* args[1];
00050     char* progname = "ServerDLL";
00051     args[0] = progname;
00052 
00053     _inst = this;
00054     init(1, args);
00055 }

HxServer::~HxServer   [virtual]
 

Destructor.

00058 {
00059     _inst = NULL;
00060 
00061     std::list<HxNSBinding*>::iterator it = _nsBindings.begin();
00062     while(it != _nsBindings.end())
00063         delete (*it++);
00064         // Destructor of binding unbinds server
00065 }


Member Function Documentation

HxServer * HxServer::instance   [static]
 

Get the one and only Horus server.

00069 {
00070     return _inst;
00071 }

void HxServer::run   [virtual]
 

00171 {
00172     message("Waiting for requests");
00173     _orb->run();
00174 
00175     cout << "Bye." << endl;
00176     delete this;
00177 }

void HxServer::message const char *    msg [virtual]
 

00075 {
00076     if(!_silent) cout << msg << endl;
00077 }

void HxServer::shutdown bool    wait_for_completion = false
 

00181 {
00182     // It doesn't work if the server is not in the "running" state
00183     // (if the server is showing a prompt, it is not "running")
00184 
00185     cout << "Shutting down ORB" << endl;
00186     _orb->shutdown(wait_for_completion);
00187 
00188     if(wait_for_completion) delete this;
00189 }

void HxServer::bindToNameServer const char *    name,
const char *    nsAddress
 

00193 {
00194     HxNSBinding* b = HxNSBinding::bindServer(name, nsAddress);
00195     if(b != NULL)
00196         _nsBindings.push_back(b);
00197 }

CORBA::Object_ptr HxServer::getInitialObject const char *    name
 

00215 {
00216     PortableServer::ObjectId_var oid = PortableServer::string_to_ObjectId(name);
00217 
00218     try {
00219         return _initialPOA->id_to_reference(oid);
00220     }catch(PortableServer::POA::ObjectNotActive&) {}
00221 
00222     return CORBA::Object::_nil();
00223 }

void HxServer::addInitialObject const char *    name,
PortableServer::Servant    servant
 

00201 {
00202     ostrstream ostr;
00203     ostr << "... " << name << ends;
00204     message(ostr.str());
00205     ostr.freeze(0);
00206 
00207     PortableServer::ObjectId_var oid = PortableServer::string_to_ObjectId(name);
00208     _initialPOA->activate_object_with_id(oid, servant);
00209     CORBA::Object_var obj = _initialPOA->servant_to_reference(servant);
00210     _bootMgr->add_binding(oid, obj);
00211 }

char * HxServer::object_to_string CORBA::Object_ptr    obj
 

00259 {
00260     return _orb->object_to_string(obj);
00261 }

CORBA::Object_ptr HxServer::string_to_object const char *    ref
 

00265 {
00266     return _orb->string_to_object(ref);
00267 }

PortableServer::POA_ptr HxServer::getDataPOA  
 

00227 {
00228     return PortableServer::POA::_duplicate(_dataPOA);
00229 }

PortableServer::POA_ptr HxServer::getRootPOA  
 

00233 {
00234     return PortableServer::POA::_duplicate(_rootPOA);
00235 }

PortableServer::POA_ptr HxServer::getCurrentPOA  
 

00253 {
00254     return _poaCurrent->get_POA();
00255 }

PortableServer::Servant HxServer::getCurrentServant  
 

00239 {
00240     PortableServer::POA_var poa = _poaCurrent->get_POA();   
00241     PortableServer::ObjectId_var oid = _poaCurrent->get_object_id();    
00242     return poa->id_to_servant(oid);
00243 }

PortableServer::ObjectId * HxServer::getCurrentObjectId  
 

00247 {
00248     return _poaCurrent->get_object_id();
00249 }

CORBA::Object_ptr HxServer::registerServant PortableServer::Servant    srv [virtual]
 

Reimplemented from HxServerBase.

00272 {
00273     PortableServer::ObjectId_var oid = _dataPOA->activate_object(srv);
00274 
00275     char* repositoryId = srv->_primary_interface(oid, _dataPOA);
00276     HxDataObjectManager* mgr = HxDataObjectManager::get(repositoryId);
00277     CORBA::Object_var obj = _dataPOA->servant_to_reference(srv);
00278 
00279     mgr->objectCreated(oid);
00280 
00281     return obj._retn();
00282 }

void HxServer::unregisterServant const PortableServer::ObjectId &    oid [virtual]
 

Reimplemented from HxServerBase.

00286 {
00287     PortableServer::Servant srv = _dataPOA->id_to_servant(oid);
00288 
00289     _dataPOA->deactivate_object(oid);
00290 
00291     char* repositoryId = srv->_primary_interface(oid, _dataPOA);
00292     HxDataObjectManager* mgr = HxDataObjectManager::get(repositoryId);
00293     mgr->objectDeleted(oid);
00294 
00295     srv->_remove_ref();
00296 }

PortableServer::Servant HxServer::getServant CORBA::Object_ptr    obj [virtual]
 

Reimplemented from HxServerBase.

00300 {
00301     PortableServer::Servant result;
00302 
00303     try 
00304     {
00305         result = _dataPOA->reference_to_servant(obj);
00306     } 
00307     catch(PortableServer::POA::WrongAdapter&) 
00308     {
00309         result = NULL;
00310     }
00311     catch(PortableServer::POA::ObjectNotActive&)
00312     {
00313         result = NULL;
00314     }
00315 
00316     return result;
00317 }

HxCorba::RgbBuffer_ptr HxServer::createRgbBuffer   [virtual]
 

00321 {
00322     HxRgbBufferServant* servant = new HxRgbBufferServant();
00323     CORBA::Object_var obj = registerServant(servant);
00324     HxCorba::RgbBuffer_var res = HxCorba::RgbBuffer::_narrow(obj);
00325     return res._retn();
00326 }

void HxServer::setRgbBufferArray HxCorba::RgbBuffer_ptr    buf,
int *    array
[virtual]
 

00330 {
00331     PortableServer::Servant servant = HxServer::instance()->getServant(buf);
00332     if(servant != NULL) { 
00333         HxRgbBufferServant* pixbuff = dynamic_cast<HxRgbBufferServant*>(servant);
00334         pixbuff->setBuffer(array);
00335         servant->_remove_ref();
00336     }
00337 }

void HxServer::init int    argc,
char *    argv[]
[protected]
 

00081 {
00082     message("Initializing ORB");
00083 
00084     const char* dataPOAname = "dataPOA";
00085     HxDataObjectManager::init(dataPOAname);
00086 
00087 #if (OB_INTEGER_VERSION >= 4000500L)
00088     OB::Properties_var dflt = OB::Properties::getDefaultProperties();
00089     OB::Properties_var props = new OB::Properties(dflt);
00090     //props -> setProperty("ooc.orb.oa.port", "8010");
00091     //props -> setProperty("ooc.iiop.acceptor.data.port", "2000");
00092 
00093     props -> setProperty("ooc.orb.oa.conc_model", "threaded");
00094     _orb = OBCORBA::ORB_init(argc, argv, props);
00095 #else
00096     _orb = CORBA::ORB_init(argc, argv);
00097 #endif
00098 
00099     //RootPOA
00100     CORBA::Object_var poaObj = _orb->resolve_initial_references("RootPOA");
00101     _rootPOA = PortableServer::POA::_narrow(poaObj);
00102     PortableServer::POAManager_var poa_manager = _rootPOA->the_POAManager();
00103 
00104     //Display the host and port (ORBacus specific)
00105     OBPortableServer::POAManager_var obManager =
00106         OBPortableServer::POAManager::_narrow(poa_manager);
00107     OCI::AcceptorSeq_var acceptors = obManager->get_acceptors();
00108     for(int i=0; i<acceptors->length(); i++) {
00109         OCI::AcceptorInfo_var info = acceptors[i]->get_info();
00110         OCI::IIOP::AcceptorInfo_var iiopInfo =
00111             OCI::IIOP::AcceptorInfo::_narrow(info);
00112         if(!CORBA::is_nil(iiopInfo)) {
00113             ostrstream ostr;
00114             ostr << "Starting server at port " << iiopInfo->port() << ends;
00115             message(ostr.str());
00116             ostr.freeze(0);
00117         }
00118     }
00119 
00120 
00121     //POACurrent
00122     CORBA::Object_var currObj = _orb->resolve_initial_references("POACurrent");
00123     _poaCurrent = PortableServer::Current::_narrow(currObj);
00124 
00125     //Initial POA
00126     message("Creating POA for initial objects:");
00127     CORBA::PolicyList policies;
00128     policies.length(2);
00129     policies[0] = _rootPOA->create_id_assignment_policy(PortableServer::USER_ID);
00130     policies[1] = _rootPOA->create_lifespan_policy(PortableServer::PERSISTENT);
00131     _initialPOA = _rootPOA->create_POA("InitialPOA", poa_manager, policies);
00132 
00133     //BootManager (ORBacus specific)
00134     CORBA::Object_var bootObj = _orb->resolve_initial_references("BootManager");
00135     _bootMgr = OB::BootManager::_narrow(bootObj);
00136 
00137     addInitialObject("Constructor", new HxConstructorServant());
00138     addInitialObject("GlobalOps", new HxGlobalOpsServant(this));
00139     addInitialObject("Registry", new HxRegistryServant());
00140     addInitialObject("Test", new HxTestServant());
00141     addInitialObject("Configure", new HxConfigureServant());
00142 
00143     /*CORBA::Object_var poaMgrObj = _orb->resolve_initial_references("POAManagerFactory");
00144     OBPortableServer::POAManagerFactory_var factory =
00145         OBPortableServer::POAManagerFactory::_narrow(poaMgrObj);
00146     PortableServer::POAManager_var dataPOAManager =
00147         factory -> create_poa_manager("data");*/
00148 
00149     //Data POA
00150     message("Creating POA for data");
00151     policies.length(0);
00152     _dataPOA = _rootPOA->create_POA(dataPOAname, poa_manager, policies);
00153     //_dataPOA = _rootPOA->create_POA(dataPOAname, dataPOAManager, policies);
00154     //dataPOAManager->activate();
00155 
00156     //Activate POAManager
00157     poa_manager->activate();
00158 
00159     //Set HxEnvironment
00160     HxEnvCorba *env = new HxEnvCorba();
00161 
00162     //In case of collocated... (ORBacus specific)
00163 #if (OB_INTEGER_VERSION < 4000500L)
00164     OBCORBA::ORB_var oborb = OBCORBA::ORB::_narrow(_orb);
00165     oborb -> run_init();
00166 #endif
00167 }


Member Data Documentation

CORBA::ORB_ptr HxServer::_orb [protected]
 

PortableServer::POA_var HxServer::_rootPOA [protected]
 

PortableServer::POA_var HxServer::_dataPOA [protected]
 

PortableServer::POA_var HxServer::_initialPOA [protected]
 

OB::BootManager_var HxServer::_bootMgr [protected]
 

PortableServer::Current_var HxServer::_poaCurrent [protected]
 

std::list<HxNSBinding*> HxServer::_nsBindings [protected]
 


The documentation for this class was generated from the following files:
Generated on Tue Feb 3 14:20:17 2004 for CorbaReference by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001