#include "KartenLeser.h" #include "..\Global\Variablen.h" #include #include #include #include #include KartenLeser* KartenLeser::instance = new KartenLeser(); KartenLeser* KartenLeser::getInstance() { return dynamic_cast(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; return *this; } // Inhalt der KartenLeser Klasse aus KartenLeser.h // Konstruktor KartenLeser::KartenLeser() : ReferenceCounter() { letzterFehler = new Text(""); kartenClient = 0; karteId = 0; } // 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() { 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(dynamic_cast(uiFactory.initParam.schrift->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; } const char* KartenLeser::getLetzterFehler() const { return letzterFehler->getText(); }