123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- #include "News.h"
- #include <DateiSystem.h>
- #include <Bildschirm.h>
- #include <Punkt.h>
- #include <Textfeld.h>
- #include <Schrift.h>
- #include <Datei.h>
- #include <InitDatei.h>
- 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<Zeichnung*>(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<Zeichnung*>(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<Schrift*>(uiFactory.initParam.schrift->getThis()));
- frame->setBildschirmZ(dynamic_cast<Bildschirm*>(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<Zeichnung*>(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;
- }
|