Patcher.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #include "Patcher.h"
  2. #include <Text.h>
  3. #include "../Global/Variablen.h"
  4. typedef UpdaterV *( *GetUpdater )( KSGClient::PatchServerClient* );
  5. // Inhalt der Patcher Klasse aus Patcher.h
  6. // Konstruktor
  7. Patcher::Patcher()
  8. {
  9. updater = 0;
  10. updateDll = 0;
  11. läuft = 0;
  12. ref = 1;
  13. }
  14. // Destruktor
  15. Patcher::~Patcher()
  16. {
  17. if( updater )
  18. updater->release();
  19. if( updateDll )
  20. FreeLibrary( updateDll );
  21. }
  22. // nicht constant
  23. bool Patcher::update( int dateiGruppe, bool *abbruch, FBalken *fortschritt, TextFeld *status, Text *zError )
  24. {
  25. if( läuft )
  26. {
  27. zError->setText( "Es kann nur ein Update zur Zeit herruntergeladen werden." );
  28. fortschritt->release();
  29. status->release();
  30. return 0;
  31. }
  32. läuft = 1;
  33. if( !updater )
  34. {
  35. if( !updateDll )
  36. updateDll = dllDateien->ladeDLL( "update.dll", "data/bin/update.dll" );
  37. if( !updateDll )
  38. {
  39. updater = 0;
  40. zError->setText( "Die DLL Datei 'data/bin/update.dll' wurde nicht gefunden." );
  41. }
  42. else
  43. {
  44. GetUpdater getUpdater = (GetUpdater)GetProcAddress( updateDll, "getUpdater" );
  45. if( !getUpdater )
  46. {
  47. updater = 0;
  48. zError->setText( "Der Einstiegspunkt 'getUpdater' konnte in der DLL Datei 'data/bin/update.dll' nicht gefunden." );
  49. }
  50. else
  51. {
  52. KSGClient::PatchServerClient *patchClient = mainClient->createPatchServerClient();
  53. if( !patchClient )
  54. {
  55. updater = 0;
  56. zError->setText( mainClient->getLetzterFehler() );
  57. }
  58. else
  59. updater = getUpdater( patchClient );
  60. }
  61. }
  62. }
  63. if( !updater )
  64. {
  65. fortschritt->release();
  66. status->release();
  67. läuft = 0;
  68. return 0;
  69. }
  70. UpdateParams p;
  71. p.abbruch = abbruch;
  72. p.dateiGruppe = dateiGruppe;
  73. p.zFortschritt = fortschritt;
  74. p.zStatus = status;
  75. int ret = updater->update( &p );
  76. fortschritt->release();
  77. status->release();
  78. if( ret == 1 )
  79. zError->setText( updater->getError() );
  80. läuft = 0;
  81. return ret != 1;
  82. }
  83. // constant
  84. bool Patcher::läuftPatch() const
  85. {
  86. return läuft;
  87. }
  88. int Patcher::getDownload() const
  89. {
  90. return updater ? updater->getDownload() : 0;
  91. }
  92. // Reference Counting
  93. Patcher *Patcher::getThis()
  94. {
  95. ref++;
  96. return this;
  97. }
  98. Patcher *Patcher::release()
  99. {
  100. ref--;
  101. if( !ref )
  102. delete this;
  103. return 0;
  104. }