rllib  1
rlcorba.h
Go to the documentation of this file.
00001 /***************************************************************************
00002                           rlcorba.h  -  description
00003                              -------------------
00004     begin                : Tue Jan 02 2001
00005     copyright            : (C) 2001 by Rainer Lehrig
00006     email                : lehrig@t-online.de
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This library is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE as        *
00013  *   published by the Free Software Foundation                             *
00014  *                                                                         *
00015  ***************************************************************************/
00016 #ifndef _RL_CORBA_H_
00017 #define _RL_CORBA_H_
00018 
00019 #include "rldefine.h"
00020 #define rlMICO
00021 //#define rlVISIBROKER
00022 //#define rlOMNIORB
00023 
00024 #include <CORBA.h>
00025 #ifdef rlMICO
00026 #include <mico/throw.h>
00027 #endif
00028 
00029 template <class T, class Tvar>
00030 class rlCorbaClient
00031 {
00032 public:
00033 #ifdef rlMICO
00034   rlCorbaClient(int ac, char **av, const char *iname)
00035   {
00036     idlname = adr = NULL;
00037     if(iname == NULL) return;
00038     idlname = new char[strlen(iname)+1];
00039     strcpy(idlname,iname);
00040     for(int i=0; i<ac; i++)
00041     {
00042       if(strncmp(av[i],"inet:",5) == 0)
00043       {
00044         if(adr != NULL) delete adr;
00045         adr = new char[strlen(av[i])+1];
00046         strcpy(adr,av[i]);
00047       }
00048     }
00049     orb = CORBA::ORB_init(ac,av);
00050     obj = orb->bind(idlname, adr);
00051     if(CORBA::is_nil(obj))
00052     {
00053       cerr << "cannot bind to " << adr << endl;
00054       delete adr;
00055       adr = NULL;
00056       return;
00057     }
00058     client = T::_narrow(obj);
00059     if(CORBA::is_nil(client))
00060     {
00061       cerr << "Argument is not a " << idlname << " reference" << endl;
00062     }
00063   }
00064   ~rlCorbaClient()
00065   {
00066     if(idlname != NULL) delete idlname;
00067     if(adr     != NULL) delete adr;
00068   }
00069 #endif
00070   char               *idlname;
00071   char               *adr;
00072   CORBA::ORB_var     orb;
00073   CORBA::Object_var  obj;
00074   Tvar               client;
00075 };
00076 
00077 template <class Timpl, class Tvar>
00078 class rlCorbaServer
00079 {
00080 public:
00081 #ifdef rlMICO
00082   rlCorbaServer(int ac, char **av, const char *)
00083   {
00084     orb = CORBA::ORB_init(ac,av);
00085     obj = orb->resolve_initial_references("RootPOA");
00086     poa = PortableServer::POA::_narrow(obj);
00087     mgr = poa->the_POAManager();
00088     server = server_servant._this();
00089     CORBA::String_var  str = orb->object_to_string(server);
00090     cout << str << endl;   // write reference to stdout
00091     mgr->activate();
00092   }
00093   ~rlCorbaServer()
00094   {
00095   }
00096 #endif
00097   void run()
00098   {
00099     orb->run();
00100   }
00101   char *adr;
00102   CORBA::ORB_var                 orb;
00103   CORBA::Object_var              obj;
00104   PortableServer::POA_var        poa;
00105   PortableServer::POAManager_var mgr;
00106   Timpl                          server_servant;
00107   Tvar                           server;
00108 };
00109 
00110 #endif