Medienserver
-
Hallo Leute, ich habe hier eine idl Datei erstellt, die eine .h-Datei generiert...ich muss jetzt einen client und den server umschreiben, den code habe isch schon, nur weiß ich nicht wie ich anfangen soll...weiß jemand von Euch wie man es macht
hier schon einmal meine idl und der server...
////////////////////////////////////////////////////////////////
const unsigned long medienMax = 10; //
struct medium{
string title;
char typ;
string name;
unsigned long size;
unsigned long count;};
typedef sequence<medium>mediumList; interface Medien{ medium create(in string title, in char typ, in string name, in unsigned long size, in unsigned long count); mediumList getList(); mediumList showMedienList(); mediumList searchMedium(in string titel); boolean leasingMedium(in string titel); boolean returnMedium(in string titel); //unsigned long getAnzahl();*/ };////////////////////////////////////////////////////////////////
/* accountList_srv.cc * Beispiel mit statischem Feld, das Objekte mit Kontoinformationen (Inhaber, Nummer) enthaelt * getestet unter Ubuntu 10.04 32Bit, MICO 3.2.13 */ #include <CORBA.h> #include <coss/CosNaming.h> #include "mediumList.h" #ifdef HAVE_ANSI_CPLUSPLUS_HEADERS #include <fstream> #include <string> #include <sstream> #else #include <fstream.h> #include <string.h> #include <sstream.h> #endif using namespace std; // Implementierung des Mediums class Medien_impl : virtual public POA_Medien { private: mediumList *allMedien; unsigned long valueMedien; public: Medien_impl(); void fillingMedienlist(); mediumList *showMedienList(); mediumList *searchMedium(const char* titel); CORBA::Boolean leasingMedium(const char* titel); CORBA::Boolean returnMedium(const char* titel); }; Medien_impl::Medien_impl(){ this->allMedien = new mediumList(); fillingMedienlist(); } ////////////////// LISTE FUELLEN /////////////////////////////////////////////////////////////////////////////////// void Medien_impl::fillingMedienlist(){ medium *med = new medium(); this->valueMedien=0; med->title = "Koenig der Loewe"; med->typ = 'V'; med->name = "koenig.avi"; med->size = 700; med->count = 3; this->allMedien->allMedien[valueMedien++] = *med; med->title = "Twilight 1"; med->typ = 'V'; med->name = "twilight.mpg4"; med->size = 950; med->count = 3; this->allMedien->allMedien[valueMedien++] = *med; med->title = "Twilight 2"; med->typ = 'V'; med->name = "twilight.avi"; med->size = 800; med->count = 3; this->allMedien->allMedien[valueMedien++] = *med; med->title = "Der Knochenjaeger"; med->typ = 'A'; med->name = "knochenjaeger.mp3"; med->size = 100; med->count = 3; this->allMedien->allMedien[valueMedien++] = *med; med->title = "Der Gestiefelte Kater"; med->typ = 'V'; med->name = "Kater.move"; med->size = 750; med->count = 3; this->allMedien->allMedien[valueMedien++] = *med; med->title = "Pamela Anderson"; med->typ = 'F'; med->name = "anderson.png"; med->size = 30; med->count = 3; this->allMedien->allMedien[valueMedien++] = *med; med->title = "Aschenputtel"; med->typ = 'A'; med->name = "aschenputtel.mp3"; med->size = 250; med->count = 3; this->allMedien->allMedien[valueMedien++] = *med; med->title = "Kalender 2012"; med->typ = 'T'; med->name = "kalender_2012.pdf"; med->size = 40; med->count = 3; this->allMedien->allMedien[valueMedien++] = *med; med->title = "Madagaskar"; med->typ = 'V'; med->name = "madagaskar.avi"; med->size = 750; med->count = 3; this->allMedien->allMedien[valueMedien++] = *med; med->title = "Shrek"; med->typ = 'V'; med->name = "shrek.mov"; med->size = 950; med->count = 3; this->allMedien->allMedien[valueMedien++] = *med; } ////////////////// ANZEIGEN /////////////////////////////////////////////////////////////////////////////////// mediumList *Medien_impl::showMedienList(void){ mediumList *result = new mediumList; for (unsigned int idx=0; idx < medienMax; idx++) result->allMedien[idx] = this->allMedien->allMedien[idx]; return result; } ////////////////// SUCHEN /////////////////////////////////////////////////////////////////////////////////// mediumList *Medien_impl::searchMedium(const char* titel){ mediumList *result = new mediumList; unsigned long i; //Mit der Funktion strstr() können Sie einen Teilstring in einem größeren String suchen. if(strstr(this->allMedien->allMedien[i].title,titel) != NULL) cout << "gefunden" << endl; else cout << "nicht gefunden" << endl; return result; } ////////////////// AUSLEIHE /////////////////////////////////////////////////////////////////////////////////// CORBA::Boolean Medien_impl::leasingMedium(const char* titel){ cout << "Der Titel: " << titel << " soll ausgeliehen werden." << endl; unsigned long i; unsigned long anz; for (i = 0 ; i < this->valueMedien ; i++) { if (!strcmp(this->allMedien->allMedien[i].title,titel)) { anz = this->allMedien->allMedien[i].count; if (anz > 0) { this->allMedien->allMedien[i].count = anz-1; cout << "Titel ist vorraetig und wird verschickt. " << endl; return true; } else { cout << "Der Titel ist leider nicht vorraetig. " << endl; return false; } } } cout << "Der Titel ist nicht in unserem Bestand" << endl; return false; } ////////////////// RUECKGABE /////////////////////////////////////////////////////////////////////////////////// CORBA::Boolean Medien_impl::returnMedium(const char* titel){ cout << "Der Titel: " << titel << " wird zurueck gegeben." << endl; unsigned long i; unsigned long anz; for (i = 0 ; i < this->valueMedien ; i++) { if (!strcmp(this->allMedien->allMedien[i].title,titel)) { anz = this->allMedien->allMedien[i].count; this->allMedien->allMedien[i].count = anz+1; cout << "Vielen Dank fuer die Rueckgabe.\n” " << endl; return true; } } cout << "Titel ist nicht vorhanden" << endl; return false; } //////////////////////////////////////////////////////////////////////////////////////////////////////////// // Hauptprogramm startet POA und macht Konto-Object erreichbar int main(int argc, char *argv[]) { cout << endl; cout << "medien_server ist gestartet" << endl << endl; // Erzeugung ORB Objekt + initialisieren CORBA::ORB_var orb = CORBA::ORB_init (argc,argv); // Referenz zum RootPOA und seinem Manager holen CORBA::Object_var poaobj = orb->resolve_initial_references("RootPOA"); // Typumwandlung des Object_var in POA_var mittels _narrow Methode PortableServer::POA_var poa = PortableServer::POA::_narrow(poaobj); // Starten des Zustandsautomaten POAManager zur Steuerung des POA PortableServer::POAManager_var mgr = poa->the_POAManager(); // MedienObjekt erzeugen Medien_impl *myMedium = new Medien_impl(); //myMedien->fillingMedienlist(); // Objekt innerhalb POA aktivieren PortableServer::ObjectId_var oid = poa->activate_object(myMedium); // Objektreferenz im Naming Service speichern CORBA::Object_var ref = poa->id_to_reference (oid.in()); // Referenz zum Naming Service holen CORBA::Object_var nsobj = orb->resolve_initial_references ("NameService"); CosNaming::NamingContext_var nc = CosNaming::NamingContext::_narrow (nsobj); if (CORBA::is_nil (nc)) { cerr << "Fehler: Konnte Naming Service nicht erreichen!" << endl; exit (1); } // NamingService fuer Konto einrichten CosNaming::Name name; name.length(1); name[0].id = CORBA::string_dup("Accountname"); name[0].kind = CORBA::string_dup(""); // Referenz zu unserem Konto im Naming Service speichern // rebind anstatt bind - ueberschreibt vorhandene Bindungen cout << "Konto wird an Naming Service gebunden..." << flush; nc->rebind(name,ref); cout << "erledigt." << endl; mgr->activate(); orb->run(); // Server herunter fahren delete myMedium; poa->destroy (TRUE, TRUE); return 0; }
-
Versetz dich mal in jemanden, der nicht du bist. Dann lies diesen Text:
julchatt schrieb:
Hallo Leute, ich habe hier eine idl Datei erstellt, die eine .h-Datei generiert...ich muss jetzt einen client und den server umschreiben, den code habe isch schon, nur weiß ich nicht wie ich anfangen soll...weiß jemand von Euch wie man es macht
-
julchatt, wenn ich dich richtig verstanden habe, dann möchtest du, dass wir dir helfen, den Code umzuschreiben? Reicht es, wenn ich Variablennamen ändere? Auf der anderen Seite, kannst du aber auch selber im Editor machen.