[ Pobierz całość w formacie PDF ]
.*/MESSAGING_mail_submit(msg_client, ourmessage, &ev);Przechwytujemy jakieś wyjątki (spowodowane np.niedostępnością sieci):if(ev._major != CORBA_NO_EXCEPTION) {printf("we got exception %d from submit!\n", ev._major);return 1;}/* Oczyszczenie zawartości.*/CORBA_Object_release(msg_client, &ev);CORBA_Object_release((CORBA_Object)orb, &ev);return 0;}Na zakończenie funkcja, która odczytuje zbitkę wierszy i przenosi je do bufora:int readlines (void) {char linebuff[4096]; /* Tymczasowy bufor dla wierszy.*/int nlines, llen;for (nlines = 0; fgets(linebuff, 4096, stdin); !feof(stdin)) {llen = strlen(linebuff);contents[nlines] = (char*) malloc(llen+1);linebuff[llen-1]=0; /* Wymuszenie ogranicznika wiersza */strcpy (contents[nlines], linebuff);nlines++;if (nlines >= MAXMSGLEN) {return nlines;}}return nlines;}Serwer komunikatówKod serwera komunikatów pokazuje niezależność od języka programowania, ponieważ napisano go w języku Python.Widać tu również sposób, w jaki Python umożliwia bardziej czytelne odwzorowanie niż język C, ponieważ ma wbudowane właściwości obsługujące obiekty, klasy i wyjątki (tutaj nie używane).Oprócz tego, Python dysponuje możliwością usuwania pozostałości, co oznacza, że nie musimy się martwić o ubarwianie kodu wywołaniami malloc i free w celu utrzymania pamięci w ryzach.Pamięć musi być tu również przydzielana i zwalniana, ale nie wymaga to wprowadzania dodatkowego kodu.Oto zawartość pliku msg-server.py:#!/usr/bin/env pythonimport CORBAclass mail:msgs = 0 # Message counterdef submit(self, msg):print "Message Received from:", msg.frprint "Message for:", msg.tofor line in msg.body:print lineself.msgs = self.msgs + 1print "Messages: ", self.msgsCORBA.load_idl("msg.idl")CORBA.load_idl("/usr/share/idl/name-service.idl")orb = CORBA.ORB_init((), CORBA.ORB_ID)poa = orb.resolve_initial_references("RootPOA")servant = POA.MESSAGING.mail(mail())poa.activate_object(servant)ref = poa.servant_to_reference(servant)open("./msg-server.ior", "w").write(orb.object_to_string(ref))print "Wrote out IOR: ", orb.object_to_string(ref)poa.the_POAManager.activate()orb.run() # Serwer znajduje się w pętli zdarzeń ORBit i oczekuje żądańKompilowanie aplikacji ORBITA oto plik konfiguracyjny makefile dla naszej aplikacji:### Makefile dla systemu powiadamiania# Konfiguracja ORBit:ORBIT_IDL = /usr/bin/orbit-idlORBIT_CFLAGS = -I/usr/lib/glib/include -I/usr/includeORBIT_LIBS = -L/usr/lib -lORBit -lIIOP -lORBitutil -lglib -lmCFLAGS = $(ORBIT_CFLAGS) -gLFLAGS = $(ORBIT_LIBS)all: msg-client msg.hh msgSK.cc### Kilka przekształceń ORBit IDL%.h : %.idlorbit-idl $<%-common.c : %.idlorbit-idl $<%-skels.c : %.idlorbit-idl $<%-stubs.c : %.idlorbit-idl $<### Zależności omniORB.%SK.cc: %.idlomniidl2 $<%.hh : %.idlomniidl2 $<### Teraz nasze ulubione zależności:msg.h: msg.idlmsg-common.c: msg.idlmsg-stubs.c: msg.idlmsg-skels.c: msg.idl### Tutaj ustawiono powiązanie z omniORB2 zapewniając dodatkową weryfikację### czy IDL jest poprawnie zbudowane z perspektywy innego języka,### ORB i parsera.Jeżeli ten pośrednik nie jest zaistalowany, to### powiązanie się nie uda, generując błąd.msg.hh: msg.idlmsgSK.cc: msg.idl### Kompilacja klienta komunikatówmsg-client: msg-client.o msg-common.o msg-stubs.o$(CC) -o msg-client msg-client.o msg-stubs.o msg-common.o \$(LFLAGS)msg-client.o: msg-client.cMoże nie jest najlepszym pomysłem użycie make do automatycznej generacji zrębów z IDL, ale to działa.Zauważmy, że makefile tworzy pliki powiązań do C++ dzięki użyciu pośrednika omniORB.Faktycznie nie korzystamy z tego, lecz taka konstrukcja pomaga w wyszukiwaniu błędów w plikach IDL, ponieważ omniORB szuka problemów odnoszących się do języka C++.Uruchamianie przykładowej aplikacjiNajpierw należy się upewnić, czy ORBit, Python oraz ORBit-Python są zainstalowane w systemie.Pierwsze dwa są prawdopodobnie dostarczone w dystrybucji Linuksa.ORBit-Python umożliwiający powiązanie języka Python z pośrednikiem ORBit można pobrać ze strony http://projects.sault.org/orbit-python.Załóżmy, że wszystkie wspomniane do tej pory pliki są już w katalogu /usr/local/erc/ORBitsamples.Przejdźmy do tego katalogu i użyjmy polecenia:$ makeZostaną utworzone zręby IDL i msg-client, a także msg.hh oraz msgSK.cc jeżeli był zainstalowany pośrednik omniORB.Musimy teraz uruchomić serwer, aby można było dokonać rozruchu naszej rozproszonej aplikacji:$./msg-serverDokonuje się to z aktualnie używanego terminala, a więc można uruchomić ten program w tle, aby dalsze korzystanie z terminala było możliwe.Polecenie spowodowało uruchomienie serwera i zapis IOR w postaci znakowej do pliku /usr/local/src/ORBitsamples/msg-server.ior.Można przejrzeć zawartość tego pliku, aby sprawdzić, jak wygląda IOR.Teraz nadeszła chwila prawdy: przejdźmy na dostępny terminal i wpiszmy polecenie:$./msg-client me you < msg-server.iorTerminal, na którym został uruchomiony msg-server powinien teraz wyświetlić liczbę komunikatów, informację o każdym komunikacie i zawartość pliku IOR [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • lunamigotliwa.htw.pl
  •