Updater.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #include "ShopServer.h"
  2. #include <Klient.h>
  3. #include <iostream>
  4. // Inhalt der Updater Klasse aus Updater.h
  5. // Konstruktor
  6. Updater::Updater(ShopServer* shServ)
  7. : Thread()
  8. {
  9. shs = shServ;
  10. beenden = 0;
  11. start();
  12. }
  13. // Destruktor
  14. Updater::~Updater()
  15. {
  16. beenden = 1;
  17. warteAufThread(5000);
  18. if (isRunning())
  19. ende();
  20. shs->release();
  21. }
  22. // nicht constant
  23. void Updater::thread()
  24. {
  25. while (!beenden)
  26. {
  27. for (int i = 0; i < 60; i++)
  28. {
  29. if (beenden)
  30. break;
  31. Sleep(1000);
  32. }
  33. if (beenden)
  34. break;
  35. int kId = shs->zDB()->getUpdateKarte(shs->getId());
  36. if (kId)
  37. {
  38. Text updatePf = shs->zInit()->zWert("ShopSeitenPfad")->getText();
  39. updatePf += "/update";
  40. DateiRemove(updatePf);
  41. int port = 0;
  42. Text ip = "";
  43. if (!shs->zDB()->getEditorServerPortIp(kId, &port, &ip))
  44. continue;
  45. Klient* k = new Klient();
  46. unsigned char key[20] = { 55, 124, 19, 204, 23, 5, 59, 75, 247, 138, 119, 111, 57, 250, 206, 187, 165, 6, 247, 151 };
  47. k->setEmpfangKey((char*)key, 20);
  48. k->setSendeKey((char*)key, 20);
  49. char ret = 0;
  50. if (!k->verbinde((unsigned short)port, ip))
  51. {
  52. k = (Klient*)k->release();
  53. std::cout << "ShS: Updater: Fehler beim Updaten von Karte " << kId << ".\n Verbindung zum Editorserver konnte nicht hergestellt werden.\n";
  54. continue;
  55. }
  56. k->sendeEncrypted("\x8", 1);
  57. k->getNachrichtEncrypted(&ret, 1);
  58. if (ret == 1)
  59. {
  60. k->sendeEncrypted((char*)&kId, 4);
  61. k->getNachrichtEncrypted(&ret, 1);
  62. if (ret == 1)
  63. {
  64. int anz = 0;
  65. k->getNachrichtEncrypted((char*)&anz, 4);
  66. for (int i = 0; i < anz && !beenden; i++)
  67. {
  68. unsigned char len = 0;
  69. k->getNachrichtEncrypted((char*)&len, 1);
  70. if (!len)
  71. continue;
  72. char* pfa = new char[len + 1];
  73. pfa[(int)len] = 0;
  74. k->getNachrichtEncrypted(pfa, len);
  75. __int64 size = 0;
  76. k->getNachrichtEncrypted((char*)&size, 8);
  77. char* buffer = new char[2048];
  78. Text pfad = updatePf;
  79. pfad += pfa;
  80. delete[] pfa;
  81. Datei d;
  82. d.setDatei(pfad);
  83. d.erstellen();
  84. d.open(Datei::Style::schreiben);
  85. while (size)
  86. {
  87. int l = size >= 2048 ? 2048 : (int)size;
  88. k->getNachricht(buffer, l);
  89. d.schreibe(buffer, l);
  90. size -= l;
  91. }
  92. d.close();
  93. delete[] buffer;
  94. }
  95. if (beenden)
  96. {
  97. k->sendeEncrypted("\3", 1);
  98. k->getNachrichtEncrypted(&ret, 1);
  99. k->trenne();
  100. k->release();
  101. break;
  102. }
  103. Text neuPfad = shs->zInit()->zWert("ShopSeitenPfad")->getText();
  104. neuPfad += "/karten/";
  105. neuPfad += kId;
  106. DateiRemove(neuPfad);
  107. DateiUmbenennen(updatePf, neuPfad);
  108. }
  109. }
  110. if (ret == 3)
  111. {
  112. unsigned char byte = 0;
  113. k->getNachrichtEncrypted((char*)&byte, 1);
  114. char* f = new char[byte + 1];
  115. f[(int)byte] = 0;
  116. k->getNachrichtEncrypted(f, byte);
  117. std::cout << "ShS: Updater: Fehler beim Update von Karte " << kId << ".\n Meldung: " << f << "\n";
  118. delete[] f;
  119. k->sendeEncrypted("\3", 1);
  120. k->getNachrichtEncrypted(&ret, 1);
  121. k->trenne();
  122. k->release();
  123. continue;
  124. }
  125. k->sendeEncrypted("\3", 1);
  126. k->getNachrichtEncrypted(&ret, 1);
  127. k->trenne();
  128. k->release();
  129. shs->zDB()->endUpdateKarte(kId);
  130. }
  131. }
  132. run = 0;
  133. }