Patcher.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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. if( status )
  30. status->release();
  31. return 0;
  32. }
  33. läuft = 1;
  34. if( !updater )
  35. {
  36. if( !updateDll )
  37. updateDll = dllDateien->ladeDLL( "update.dll", "data/bin/update.dll" );
  38. if( !updateDll )
  39. {
  40. updater = 0;
  41. zError->setText( "Die DLL Datei 'data/bin/update.dll' wurde nicht gefunden." );
  42. }
  43. else
  44. {
  45. GetUpdater getUpdater = (GetUpdater)GetProcAddress( updateDll, "getUpdater" );
  46. if( !getUpdater )
  47. {
  48. updater = 0;
  49. zError->setText( "Der Einstiegspunkt 'getUpdater' konnte in der DLL Datei 'data/bin/update.dll' nicht gefunden." );
  50. }
  51. else
  52. {
  53. KSGClient::PatchServerClient *patchClient = mainClient->createPatchServerClient();
  54. if( !patchClient )
  55. {
  56. updater = 0;
  57. zError->setText( mainClient->getLetzterFehler() );
  58. }
  59. else
  60. updater = getUpdater( patchClient );
  61. }
  62. }
  63. }
  64. if( !updater )
  65. {
  66. fortschritt->release();
  67. if( status )
  68. status->release();
  69. läuft = 0;
  70. return 0;
  71. }
  72. UpdateParams p;
  73. p.abbruch = abbruch;
  74. p.dateiGruppe = dateiGruppe;
  75. p.zFortschritt = fortschritt;
  76. p.zStatus = status;
  77. int ret = updater->update( &p );
  78. fortschritt->release();
  79. if( status )
  80. status->release();
  81. if( ret == 1 )
  82. zError->setText( updater->getError() );
  83. läuft = 0;
  84. return ret != 1;
  85. }
  86. // constant
  87. bool Patcher::läuftPatch() const
  88. {
  89. return läuft;
  90. }
  91. int Patcher::getDownload() const
  92. {
  93. return updater ? updater->getDownload() : 0;
  94. }
  95. // Reference Counting
  96. Patcher *Patcher::getThis()
  97. {
  98. ref++;
  99. return this;
  100. }
  101. Patcher *Patcher::release()
  102. {
  103. ref--;
  104. if( !ref )
  105. delete this;
  106. return 0;
  107. }