News.cpp 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. #include "News.h"
  2. #include <DateiSystem.h>
  3. #include <Bildschirm.h>
  4. #include <Punkt.h>
  5. #include <Textfeld.h>
  6. #include <Schrift.h>
  7. #include <Datei.h>
  8. #include <InitDatei.h>
  9. void KSGSRückruf( void *p, RCArray< KSGSVariable > *parameter, KSGSVariable **ret )
  10. {
  11. if( !p )
  12. return;
  13. ( (News *)p )->rückruf( parameter, ret );
  14. }
  15. // Inhalt der News Klasse aus News.h
  16. // Konstruktor
  17. News::News( UIInit &uiFactory, KSGClient::NewsServerClient *client )
  18. : Thread()
  19. {
  20. this->client = client;
  21. // Ladeanimation laden
  22. Animation2DData *aData = new Animation2DData();
  23. LTDBDatei *aDatei = new LTDBDatei();
  24. aDatei->setDatei( new Text( "data/bilder/ladeanimation.ltdb" ) );
  25. aDatei->leseDaten( 0 );
  26. aData->ladeAnimation( aDatei );
  27. aData->setFPS( 30 );
  28. aData->setWiederhohlend( 1 );
  29. aData->setTransparent( 0 );
  30. laden = new Animation2D();
  31. laden->setPosition( uiFactory.initParam.bildschirm->getBackBufferSize() / 2 - Punkt( 25, 25 ) );
  32. laden->setSize( 50, 50 );
  33. laden->setAPS( 450 );
  34. laden->setAnimationDataZ( aData );
  35. laden->setRahmen( 1 );
  36. laden->setRahmenBreite( 1 );
  37. laden->setRahmenFarbe( 0xFFFFFFFF );
  38. laden->setSichtbar( 0 );
  39. uiFactory.initParam.bildschirm->setOnTopZeichnung( dynamic_cast<Zeichnung *>( laden->getThis() ) );
  40. // Fehler Textfeld Initialisieren
  41. fehler = uiFactory.createTextFeld( uiFactory.initParam );
  42. fehler->setStyle( TextFeld::Style::Text & ~TextFeld::Style::Sichtbar );
  43. fehler->setPosition( 10, 60 );
  44. fehler->setSize( 480, 312 );
  45. fehler->setText( "Fehler beim Laden der Seite!\n" );
  46. uiFactory.initParam.bildschirm->addMember( dynamic_cast<Zeichnung *>( fehler->getThis() ) );
  47. // Startwerte Initialisieren
  48. this->uiFactory = uiFactory;
  49. // DLL Datei Laden
  50. ksgsDll = LoadLibrary( "data/bin/KSGScript.dll" );
  51. if( !ksgsDll )
  52. { // Error
  53. fehler->addZeile( "Die DLL Datei 'data/bin/KSGScript.dll' wurde nicht gefunden." );
  54. fehler->addStyle( TextFeld::Style::Sichtbar );
  55. laden->setSichtbar( 0 );
  56. uiFactory.initParam.bildschirm->setOnTop( 0 );
  57. run = 0;
  58. return;
  59. }
  60. KSGSGetZeichnung getKSGSZeichnung = (KSGSGetZeichnung)GetProcAddress( ksgsDll, KSGS_START_FUNKTION );
  61. if( !getKSGSZeichnung )
  62. { // Error
  63. fehler->addZeile( "Die Funktion '" KSGS_START_FUNKTION "' wurde in der\nDLL Datei 'data/bil/KSGScript.dll' nicht gefunden." );
  64. fehler->addStyle( TextFeld::Style::Sichtbar );
  65. laden->setSichtbar( 0 );
  66. run = 0;
  67. return;
  68. }
  69. frame = getKSGSZeichnung();
  70. if( !frame )
  71. { // Error
  72. fehler->addZeile( "Unbekannter Fehler." );
  73. fehler->addStyle( TextFeld::Style::Sichtbar );
  74. laden->setSichtbar( 0 );
  75. run = 0;
  76. return;
  77. }
  78. frame->setSchriftZ( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) );
  79. frame->setBildschirmZ( dynamic_cast<Bildschirm *>( uiFactory.initParam.bildschirm->getThis() ) );
  80. frame->setPosition( 10, 60 );
  81. frame->setSize( 480, 312 );
  82. frame->setCallbackParam( this );
  83. frame->setCallbackFunktion( KSGSRückruf );
  84. uiFactory.initParam.bildschirm->addMember( dynamic_cast<Zeichnung *>( frame->getThis() ) );
  85. scriptName = new Text( "Patcher/Start" );
  86. // Lade Thread starten
  87. start();
  88. }
  89. // Destruktor
  90. News::~News()
  91. {
  92. if( client )
  93. {
  94. client->trenne( 1 );
  95. client->release();
  96. }
  97. if( frame )
  98. {
  99. frame->reset();
  100. frame->setBildschirmZ( 0 );
  101. uiFactory.initParam.bildschirm->removeMember( frame );
  102. frame->release();
  103. }
  104. if( ksgsDll )
  105. FreeLibrary( ksgsDll );
  106. if( scriptName )
  107. scriptName->release();
  108. laden->release();
  109. fehler->release();
  110. }
  111. // nicht constant
  112. void News::rückruf( RCArray< KSGSVariable > *parameter, KSGSVariable **ret )
  113. {
  114. if( isRunning() )
  115. return;
  116. KSGSVariable *bef = parameter->z( 0 );
  117. if( !bef )
  118. return;
  119. Text *sn = bef->getText();
  120. if( !sn || !sn->getLength() )
  121. {
  122. if( sn )
  123. sn->release();
  124. return;
  125. }
  126. scriptName->setText( sn->getText() );
  127. sn->release();
  128. start();
  129. }
  130. void News::thread()
  131. {
  132. uiFactory.initParam.bildschirm->setOnTop( 1 );
  133. laden->setSichtbar( 1 );
  134. frame->reset();
  135. // KSGScript Seite Herunterladen
  136. if( client )
  137. {
  138. if( !client->verbinde() )
  139. {
  140. fehler->addZeile( "Fehler beim verbinden mit dem News-Server." );
  141. fehler->addStyle( TextFeld::Style::Sichtbar );
  142. laden->setSichtbar( 0 );
  143. uiFactory.initParam.bildschirm->setOnTop( 0 );
  144. return;
  145. }
  146. if( !client->ladeSeite( scriptName->getText() ) )
  147. {
  148. client->trenne( 0 );
  149. fehler->addZeile( "Die Seite konnte nicht herruntergeladen werden." );
  150. fehler->addStyle( TextFeld::Style::Sichtbar );
  151. laden->setSichtbar( 0 );
  152. uiFactory.initParam.bildschirm->setOnTop( 0 );
  153. return;
  154. }
  155. client->trenne( 0 );
  156. }
  157. else
  158. {
  159. fehler->addZeile( "Es steht kein News Client zur Verfügung." );
  160. fehler->addStyle( TextFeld::Style::Sichtbar );
  161. laden->setSichtbar( 0 );
  162. uiFactory.initParam.bildschirm->setOnTop( 0 );
  163. return;
  164. }
  165. // KSGScript Laden
  166. Text *pfad = new Text( "data/tmp/news/" );
  167. pfad->append( scriptName->getText() );
  168. pfad->append( "/seite.ksgs" );
  169. frame->setScriptDatei( pfad );
  170. if( !frame->neuLaden() )
  171. { // error
  172. fehler->addZeile( "Es befindet sich ein Scriptfehler auf dieser Seite." );
  173. fehler->addStyle( TextFeld::Style::Sichtbar );
  174. laden->setSichtbar( 0 );
  175. uiFactory.initParam.bildschirm->setOnTop( 0 );
  176. run = 0;
  177. return;
  178. }
  179. laden->setSichtbar( 0 );
  180. uiFactory.initParam.bildschirm->setOnTop( 0 );
  181. run = 0;
  182. }