News.cpp 4.9 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. }