Patcher.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #include "Patcher.h"
  2. #include <Text.h>
  3. #include "../Global/Variablen.h"
  4. typedef UpdaterV *( *GetUpdater )( );
  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. updater = getUpdater();
  52. }
  53. }
  54. if( !updater )
  55. {
  56. fortschritt->release();
  57. status->release();
  58. läuft = 0;
  59. return 0;
  60. }
  61. UpdateParams p;
  62. p.abbruch = abbruch;
  63. p.dateiGruppe = dateiGruppe;
  64. p.zFortschritt = fortschritt;
  65. p.zStatus = status;
  66. int ret = updater->update( &p );
  67. fortschritt->release();
  68. status->release();
  69. if( ret == 1 )
  70. zError->setText( updater->getError() );
  71. läuft = 0;
  72. return ret != 1;
  73. }
  74. // constant
  75. bool Patcher::läuftPatch() const
  76. {
  77. return läuft;
  78. }
  79. int Patcher::getDownload() const
  80. {
  81. return updater ? updater->getDownload() : 0;
  82. }
  83. // Reference Counting
  84. Patcher *Patcher::getThis()
  85. {
  86. ref++;
  87. return this;
  88. }
  89. Patcher *Patcher::release()
  90. {
  91. ref--;
  92. if( !ref )
  93. delete this;
  94. return 0;
  95. }