#include "News.h" #include #include #include #include #include #include #include void KSGSRückruf(void* p, RCArray< KSGSVariable >* parameter, KSGSVariable** ret) { if (!p) return; ((News*)p)->rückruf(parameter, ret); } // Inhalt der News Klasse aus News.h // Konstruktor News::News(UIInit& uiFactory, KSGClient::NewsServerClient* client) : Thread() { this->client = client; // Ladeanimation laden Animation2DData* aData = new Animation2DData(); LTDBDatei* aDatei = new LTDBDatei(); aDatei->setDatei(new Text("data/bilder/ladeanimation.ltdb")); aDatei->leseDaten(0); aData->ladeAnimation(aDatei); aData->setFPS(30); aData->setWiederhohlend(1); aData->setTransparent(0); laden = new Animation2D(); laden->setPosition(uiFactory.initParam.bildschirm->getBackBufferSize() / 2 - Punkt(25, 25)); laden->setSize(50, 50); laden->setAPS(450); laden->setAnimationDataZ(aData); laden->setRahmen(1); laden->setRahmenBreite(1); laden->setRahmenFarbe(0xFFFFFFFF); laden->setSichtbar(0); uiFactory.initParam.bildschirm->setOnTopZeichnung(dynamic_cast(laden->getThis())); // Fehler Textfeld Initialisieren fehler = uiFactory.createTextFeld(uiFactory.initParam); fehler->setStyle(TextFeld::Style::Text & ~TextFeld::Style::Sichtbar); fehler->setPosition(10, 60); fehler->setSize(480, 312); fehler->setText("Fehler beim Laden der Seite!\n"); uiFactory.initParam.bildschirm->addMember(dynamic_cast(fehler->getThis())); // Startwerte Initialisieren this->uiFactory = uiFactory; // DLL Datei Laden ksgsDll = LoadLibrary("data/bin/KSGScript.dll"); if (!ksgsDll) { // Error fehler->addZeile("Die DLL Datei 'data/bin/KSGScript.dll' wurde nicht gefunden."); fehler->addStyle(TextFeld::Style::Sichtbar); laden->setSichtbar(0); uiFactory.initParam.bildschirm->setOnTop(0); run = 0; return; } KSGSGetZeichnung getKSGSZeichnung = (KSGSGetZeichnung)GetProcAddress(ksgsDll, KSGS_START_FUNKTION); if (!getKSGSZeichnung) { // Error fehler->addZeile("Die Funktion '" KSGS_START_FUNKTION "' wurde in der\nDLL Datei 'data/bil/KSGScript.dll' nicht gefunden."); fehler->addStyle(TextFeld::Style::Sichtbar); laden->setSichtbar(0); run = 0; return; } frame = getKSGSZeichnung(); if (!frame) { // Error fehler->addZeile("Unbekannter Fehler."); fehler->addStyle(TextFeld::Style::Sichtbar); laden->setSichtbar(0); run = 0; return; } frame->setSchriftZ(dynamic_cast(uiFactory.initParam.schrift->getThis())); frame->setBildschirmZ(dynamic_cast(uiFactory.initParam.bildschirm->getThis())); frame->setPosition(10, 60); frame->setSize(480, 312); frame->setCallbackParam(this); frame->setCallbackFunktion(KSGSRückruf); uiFactory.initParam.bildschirm->addMember(dynamic_cast(frame->getThis())); scriptName = new Text("Patcher/Start"); // Lade Thread starten start(); } // Destruktor News::~News() { if (client) { client->trenne(1); client->release(); } if (frame) { frame->reset(); frame->setBildschirmZ(0); uiFactory.initParam.bildschirm->removeMember(frame); frame->release(); } if (ksgsDll) FreeLibrary(ksgsDll); if (scriptName) scriptName->release(); laden->release(); fehler->release(); } // nicht constant void News::rückruf(RCArray< KSGSVariable >* parameter, KSGSVariable** ret) { if (isRunning()) return; KSGSVariable* bef = parameter->z(0); if (!bef) return; Text* sn = bef->getText(); if (!sn || !sn->getLength()) { if (sn) sn->release(); return; } scriptName->setText(sn->getText()); sn->release(); start(); } void News::thread() { uiFactory.initParam.bildschirm->setOnTop(1); laden->setSichtbar(1); frame->reset(); // KSGScript Seite Herunterladen if (client) { if (!client->verbinde()) { fehler->addZeile("Fehler beim verbinden mit dem News-Server."); fehler->addStyle(TextFeld::Style::Sichtbar); laden->setSichtbar(0); uiFactory.initParam.bildschirm->setOnTop(0); return; } if (!client->ladeSeite(scriptName->getText())) { client->trenne(0); fehler->addZeile("Die Seite konnte nicht herruntergeladen werden."); fehler->addStyle(TextFeld::Style::Sichtbar); laden->setSichtbar(0); uiFactory.initParam.bildschirm->setOnTop(0); return; } client->trenne(0); } else { fehler->addZeile("Es steht kein News Client zur Verfügung."); fehler->addStyle(TextFeld::Style::Sichtbar); laden->setSichtbar(0); uiFactory.initParam.bildschirm->setOnTop(0); return; } // KSGScript Laden Text* pfad = new Text("data/tmp/news/"); pfad->append(scriptName->getText()); pfad->append("/seite.ksgs"); frame->setScriptDatei(pfad); if (!frame->neuLaden()) { // error fehler->addZeile("Es befindet sich ein Scriptfehler auf dieser Seite."); fehler->addStyle(TextFeld::Style::Sichtbar); laden->setSichtbar(0); uiFactory.initParam.bildschirm->setOnTop(0); run = 0; return; } laden->setSichtbar(0); uiFactory.initParam.bildschirm->setOnTop(0); run = 0; }