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;
}
}