Przykład programu klienckiego w C++ (środowisko VisiBroker 4.5) korzystającego z serwera nazw (orbd) i serwisu napisanego w Javie (1.4).
Klient korzysta z usługi o interfejsie zadeklarowanym dla środowiska JAVA.
#include "CosNaming_c.hh" #include "slownik_c.hh" USE_STD_NS int main(int argc, char* const* argv) { try { // inicjowanie ORB'a CORBA::ORB_ptr orb = CORBA::ORB_init(argc,argv); // Serwer nazw CosNaming::NamingContext_var rootContext = CosNaming::NamingContext::_narrow( orb->resolve_initial_references("NameService")); CosNaming::Name name; name.length(1); name[0].id = (const char *) "tlumacz"; name[0].kind = (const char *) ""; Tlumaczenie::Slowniczek_var slownik = Tlumaczenie::Slowniczek::_narrow(rootContext->resolve(name)); cout << slownik->angpol("red") << "\n"; } catch (const CORBA::Exception& e) { cerr << e; } }
Polecenia:
idl2cpp slownik.idlgeneruje odpowiednie pliki, m.in. potrzebny podczas kompilacji slownik_c.hh. Taki program można skompilować standardowym kompilatorem c/c++. Odpowiednie parametry kompilacji można podejrzeć w podkatalogu examples instalacji VisiBrokera. Uruchomienie klienta
Klient -ORBInitRef NameService=iioploc://host.com:1050/NameServiceParametr wskazuje ORB'owi klienta gdzie znajduje się serwer nazw i na jakim nasłuchuje porcie.
#include "string.h" #include "slownik_s.hh" // implementacja serwera USE_STD_NS class SlowniczekImpl : public POA_Tlumaczenie::Slowniczek { private: char tablica[100][2][100]; int poz; public: void wstaw(const char *pol, const char * ang) { strncpy(tablica[poz][1], pol, 90); strncpy(tablica[poz][2], ang, 90); poz++; } char *angpol(const char* ang) { int i; i = 0; while (i < poz) { if (strcmp(tablica[i][2], ang)) { break; } } if (poz <= i) { throw Tlumaczenie::Nieznane(); } return CORBA::string_dup(tablica[i][1]); } char *polang(const char* pol) { int i; i = 0; while (i < poz) { if (strcmp(tablica[i][1], pol)) { break; } } if (poz <= i) { throw Tlumaczenie::Nieznane(); } return CORBA::string_dup(tablica[i][2]); } CORBA::ULong rozmiar() { return poz; } };
#include "SerwerImpl.h" // USE_STD_NS is a define setup by VisiBroker to use the std namespace USE_STD_NS int main(int argc, char* const* argv) { try { // inicjacja ORB'a CORBA::ORB_var orb = CORBA::ORB_init(argc, argv); // referencja do POA CORBA::Object_var obj = orb->resolve_initial_references("RootPOA"); PortableServer::POA_var rootPOA = PortableServer::POA::_narrow(obj); PortableServer::POAManager_var poa_manager = rootPOA->the_POAManager(); // Utworzenie serwera SlowniczekImpl slownikImp; PortableServer::ObjectId_var managerId = PortableServer::string_to_ObjectId("tlumacz"); // aktywacja serwera rootPOA->activate_object_with_id(managerId, &slownikImp); // katywacja POAManager poa_manager->activate(); cout << rootPOA->servant_to_reference(&slownikImp) << " is ready" << endl; // Czekanie na nadchodzące żądania orb->run(); } catch(const CORBA::Exception& e) { cerr << e << endl; return 1; } return 0; }
#include "slownik_c.hh" USE_STD_NS int main(int argc, char* const* argv) { try { // inicjowanie ORB'a CORBA::ORB_ptr orb = CORBA::ORB_init(argc,argv); PortableServer::ObjectId_var managerId = PortableServer::string_to_ObjectId("tlumacz"); Tlumaczenie::Slowniczek_ptr slownik = Tlumaczenie::Slowniczek::_bind("/tlumacz_agent_poa", managerId); slownik->wstaw("czerwony", "red"); cout << slownik->angpol("red") << "\n"; } catch (const CORBA::Exception& e) { cerr << e; } }