123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- #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( Bildschirm *zB, Schrift *zS, 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( zB->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 );
- zB->setOnTopZeichnung( laden->getThis() );
- // Fehler Textfeld Initialisieren
- fehler = new TextFeld();
- fehler->setStyle( TextFeld::Style::Text & ~TextFeld::Style::Sichtbar );
- fehler->setPosition( 10, 60 );
- fehler->setSize( 480, 312 );
- fehler->setSchriftFarbe( 0xFFFFFFFF );
- fehler->setSchriftZ( zS->getThis() );
- fehler->setText( "Fehler beim Laden der Seite!\n" );
- zB->addMember( fehler->getThis() );
- // Startwerte Initialisieren
- screen = zB->getThis();
- schrift = zS->getThis();
- // 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 );
- screen->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 );
- screen->setOnTop( 0 );
- run = 0;
- return;
- }
- frame = getKSGSZeichnung();
- if( !frame )
- { // Error
- fehler->addZeile( "Unbekannter Fehler." );
- fehler->addStyle( TextFeld::Style::Sichtbar );
- laden->setSichtbar( 0 );
- screen->setOnTop( 0 );
- run = 0;
- return;
- }
- frame->setSchriftZ( schrift->getThis() );
- frame->setBildschirmZ( screen->getThis() );
- frame->setPosition( 10, 60 );
- frame->setSize( 480, 312 );
- frame->setRückrufParam( this );
- frame->setRückrufFunktion( KSGSRückruf );
- screen->addMember( frame->getThis() );
- scriptName = new Text( "Patcher/Start" );
- // Lade Thread starten
- start();
- }
- // Destruktor
- News::~News()
- {
- if( client )
- {
- client->trenne( 1 );
- client->release();
- }
- if( frame )
- {
- frame->zurücksetzen();
- frame->setBildschirmZ( 0 );
- screen->removeMember( frame );
- frame->release();
- }
- if( ksgsDll )
- FreeLibrary( ksgsDll );
- if( scriptName )
- scriptName->release();
- laden->release();
- screen->release();
- fehler->release();
- schrift->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()
- {
- screen->setOnTop( 1 );
- laden->setSichtbar( 1 );
- frame->zurücksetzen();
- // 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 );
- screen->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 );
- screen->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 );
- screen->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 );
- screen->setOnTop( 0 );
- run = 0;
- return;
- }
- laden->setSichtbar( 0 );
- screen->setOnTop( 0 );
- run = 0;
- }
- // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
- Thread *News::release()
- {
- if( ref == 2 && run )
- warteAufThread( INFINITE );
- return Thread::release();
- }
|