HistorieSender.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #include "HistorieSender.h"
  2. #ifdef WIN32
  3. #include "../SpielServer.h"
  4. #else
  5. #include "SpielServer.h"
  6. #endif
  7. #include <Datei.h>
  8. // Inhalt der HistorieSender Klasse aus HistorieSender.h
  9. // Konstruktor
  10. HistorieSender::HistorieSender(SpielServer* zSS)
  11. : Thread()
  12. {
  13. this->zSS = zSS;
  14. beenden = 0;
  15. }
  16. // Destruktor
  17. HistorieSender::~HistorieSender()
  18. {}
  19. // nicht constant
  20. void HistorieSender::setEnde()
  21. {
  22. beenden = 1;
  23. }
  24. void HistorieSender::thread()
  25. {
  26. Datei* d = new Datei();
  27. d->setDatei("../spiel log");
  28. while (!beenden)
  29. {
  30. Sleep(10000);
  31. int anz = d->getUnterdateiAnzahl();
  32. RCArray< Text >* list = d->getDateiListe();
  33. int min = 0;
  34. for (int i = 0; i < anz; i++)
  35. {
  36. if (!list->z(i))
  37. continue;
  38. Text pf(d->zPfad()->getText());
  39. pf += "/";
  40. pf += list->z(i)->getText();
  41. pf += "/fertig";
  42. if (!DateiExistiert(pf))
  43. continue;
  44. if (!min || min > (int)*list->z(i))
  45. min = (int)*list->z(i);
  46. }
  47. list->release();
  48. if (min)
  49. {
  50. short port = 0;
  51. Text* ip = new Text();
  52. if (zSS->zDB()->suchHistorieServer(&port, ip))
  53. {
  54. Klient* k = new Klient();
  55. unsigned char key[20] = { 207, 30, 72, 46, 30, 50, 56, 213, 82, 107, 14, 201, 149, 58, 110, 138, 228, 241, 52, 54 };
  56. k->setSendeKey((char*)key, 20);
  57. k->setEmpfangKey((char*)key, 20);
  58. if (k->verbinde(port, *ip))
  59. {
  60. zSS->addSpielHistorieId(min);
  61. unsigned char ret = 0;
  62. k->sendeEncrypted("\5", 1);
  63. k->getNachrichtEncrypted((char*)&ret, 1);
  64. if (ret == 1)
  65. {
  66. int server = zSS->getId();
  67. k->sendeEncrypted((char*)&server, 4);
  68. k->sendeEncrypted((char*)&min, 4);
  69. k->getNachrichtEncrypted((char*)&ret, 1);
  70. if (ret == 1)
  71. DateiRemove(Text("../spiel log/") += min);
  72. }
  73. if (ret == 3)
  74. {
  75. k->getNachrichtEncrypted((char*)&ret, 1);
  76. char* err = new char[ret];
  77. k->getNachrichtEncrypted(err, ret);
  78. delete[] err;
  79. }
  80. k->sendeEncrypted("\3", 1);
  81. k->getNachrichtEncrypted((char*)&ret, 1);
  82. k->trenne();
  83. k->release();
  84. zSS->removeSpielHistorieId(min);
  85. }
  86. }
  87. ip->release();
  88. }
  89. }
  90. d->release();
  91. run = 0;
  92. }