|
rllib
1
|
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
1.7.5.1