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