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

  • Mod

    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

    http://www.c-plusplus.net/forum/200753



  • 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.


Anmelden zum Antworten