#include "KartenLeser.h" #include "..\Global\Variablen.h" #include #include #include #include #include KartenLeser *KartenLeser::instance = new KartenLeser(); KartenLeser *KartenLeser::getInstance() { return instance->getThis(); } void KartenLeser::cleanUp() { instance->release(); } KartenLeser &KartenLeser::operator=( const KartenLeser &l ) { if( kartenClient ) kartenClient->release(); letzterFehler->release(); letzterFehler = new Text( l.letzterFehler->getText() ); kartenClient = 0; karteId = 0; ref = 1; return *this; } // Inhalt der KartenLeser Klasse aus KartenLeser.h // Konstruktor KartenLeser::KartenLeser() { letzterFehler = new Text( "" ); kartenClient = 0; karteId = 0; ref = 1; } // Destruktor KartenLeser::~KartenLeser() { if( kartenClient ) kartenClient->release(); letzterFehler->release(); } // nicht constant void KartenLeser::setKarteId( int karteId ) { cs.lock(); this->karteId = karteId; if( kartenClient ) kartenClient->release(); kartenClient = infoClient->createKartenServerClient( karteId ); cs.unlock(); } void KartenLeser::lock() { cs.lock(); } void KartenLeser::unlock() { cs.unlock(); } // constant Bild *KartenLeser::getKartenTitelBild( Schrift *zSchrift ) { bool ok = 1; int port = 0; Text ip; cs.lock(); if( !kartenClient->verbinde() ) { letzterFehler->setText( kartenClient->getLetzterFehler() ); ok = 0; } if( !kartenClient->downloadKarteTitel( karteId ) ) { letzterFehler->setText( kartenClient->getLetzterFehler() ); ok = 0; } kartenClient->trenne( 0 ); cs.unlock(); Bild *ret = 0; if( ok ) { Text *pfad = getKartePfad(); pfad->append( "titel.ltdb" ); LTDBDatei *datei = new LTDBDatei(); datei->setDatei( pfad ); datei->leseDaten( 0 ); ret = datei->laden( 0, datei->zBildListe()->get( 0 ) ); datei->release(); } if( !ret ) { ret = new Bild(); ret->neuBild( 200, 100, 0xFF000000 ); TextRenderer tr( zSchrift->getThis() ); tr.setSchriftSize( 12 ); Text *kn = getKarteName(); tr.renderText( 10, 10, kn->getText(), *ret, 0xFFFFFFFF ); kn->release(); } return ret; } Bild *KartenLeser::getKartenVorschauBild() { int port = 0; Text ip; cs.lock(); if( !kartenClient->verbinde() ) { letzterFehler->setText( kartenClient->getLetzterFehler() ); return 0; } if( !kartenClient->downloadKarteMinimap( karteId ) ) { letzterFehler->setText( kartenClient->getLetzterFehler() ); return 0; } kartenClient->trenne( 0 ); cs.unlock(); Text *pfad = getKartePfad(); pfad->append( "minimap.ltdb" ); Bild *ret = 0; LTDBDatei *datei = new LTDBDatei(); datei->setDatei( pfad ); datei->leseDaten( 0 ); ret = datei->laden( 0, datei->zBildListe()->get( 0 ) ); datei->release(); if( !ret ) letzterFehler->append( "Bild nicht gefunden." ); return ret; } Bild *KartenLeser::getLadeBild() { int port = 0; Text ip; cs.lock(); if( !kartenClient->verbinde() ) { letzterFehler->setText( kartenClient->getLetzterFehler() ); return 0; } if( !kartenClient->downloadKarteLadebild( karteId ) ) { letzterFehler->setText( kartenClient->getLetzterFehler() ); return 0; } kartenClient->trenne( 0 ); cs.unlock(); Text *pfad = getKartePfad(); pfad->append( "ladebild.ltdb" ); Bild *ret = 0; LTDBDatei *datei = new LTDBDatei(); datei->setDatei( pfad ); datei->leseDaten( 0 ); ret = datei->laden( 0, datei->zBildListe()->get( 0 ) ); datei->release(); if( !ret ) letzterFehler->append( "Bild nicht gefunden." ); return ret; } bool KartenLeser::getKartenBeschreibung() { int port = 0; Text ip; cs.lock(); if( !kartenClient->verbinde() ) { letzterFehler->setText( kartenClient->getLetzterFehler() ); return 0; } if( !kartenClient->downloadKarteBeschreibung( karteId ) ) { letzterFehler->setText( kartenClient->getLetzterFehler() ); return 0; } kartenClient->trenne( 0 ); cs.unlock(); return 1; } int KartenLeser::getSpielId() const { if( !karteId ) { letzterFehler->setText( "Karte Id ist nicht gesetzt." ); return 0; } if( infoClient ) { int id = infoClient->getSpielId( karteId ); if( !id ) letzterFehler->setText( infoClient->getLetzterFehler() ); return id; } else letzterFehler->setText( "Informations Klient ist nicht Initialisiert." ); return 0; } int KartenLeser::getKarteId() const { return karteId; } Text *KartenLeser::getSpielName() const { if( infoClient ) { int id = getSpielId(); if( !id ) return 0; Text *name = infoClient->getSpielName( id ); if( !name ) letzterFehler->setText( infoClient->getLetzterFehler() ); return name; } else letzterFehler->setText( "Informations Klient ist nicht Initialisiert." ); return 0; } Text *KartenLeser::getSpielPfad() const { int sId = getSpielId(); int dg = infoClient->getDateiGruppeIdVonSpiel( sId ); Text *pfad = infoClient->getDateiGruppePfad( dg ); if( !pfad ) { letzterFehler->setText( "Der Pfad des Spieles konnte nicht ermittelt werden." ); return 0; } pfad->append( "/" ); return pfad; } Text *KartenLeser::getKarteName() const { if( !karteId ) { letzterFehler->setText( "Karte Id ist nicht gesetzt." ); return 0; } if( infoClient ) { Text *name = infoClient->getKarteName( karteId ); if( !name ) letzterFehler->setText( infoClient->getLetzterFehler() ); return name; } else letzterFehler->setText( "Informations Klient ist nicht Initialisiert." ); return 0; } Text *KartenLeser::getKartePfad() const { Text *pf = new Text( "data/tmp/Karten/" ); pf->append( karteId ); pf->append( "/" ); return pf; } char *KartenLeser::getLetzterFehler() const { return letzterFehler->getText(); } // Reference Counting KartenLeser *KartenLeser::getThis() { ref++; return this; } KartenLeser *KartenLeser::release() { ref--; if( !ref ) delete this; return 0; }