KartenLeser.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. #include "KartenLeser.h"
  2. #include <Datei.h>
  3. #include "AccountHistorieDaten.h"
  4. #include <Klient.h>
  5. // Inhalt der KartenLeser Klasse aus KartenLeser.h
  6. // Konstruktor
  7. KartenLeser::KartenLeser(int karteId, InformationServer* is)
  8. : ReferenceCounter()
  9. {
  10. pfad = new Text("");
  11. *pfad += karteId;
  12. while (DateiExistiert(pfad->getText()))
  13. pfad->append("_");
  14. Text ip;
  15. int port;
  16. is->zDB()->getKartenServerPortIp(0, karteId, &port, &ip);
  17. Klient* klient = new Klient();
  18. unsigned char key[20] = { 24, 15, 53, 87, 38, 73, 154, 38, 246, 90, 39, 133, 11, 199, 22, 80, 26, 132, 95, 54 };
  19. klient->setSendeKey((char*)key, 20);
  20. klient->setEmpfangKey((char*)key, 20);
  21. if (!klient->verbinde((unsigned short)port, ip))
  22. {
  23. klient = (Klient*)klient->release();
  24. return;
  25. }
  26. klient->sendeEncrypted("\x7", 1);
  27. char ret = 0;
  28. klient->getNachrichtEncrypted(&ret, 1);
  29. if (ret == 1)
  30. {
  31. klient->sendeEncrypted((char*)&karteId, 4);
  32. klient->getNachrichtEncrypted(&ret, 1);
  33. if (ret == 1)
  34. {
  35. int anz = 0;
  36. klient->getNachrichtEncrypted((char*)&anz, 4);
  37. for (int i = 0; i < anz; i++)
  38. {
  39. unsigned char len = 0;
  40. klient->getNachrichtEncrypted((char*)&len, 1);
  41. if (!len)
  42. continue;
  43. char* pfa = new char[len + 1];
  44. pfa[(int)len] = 0;
  45. klient->getNachrichtEncrypted(pfa, len);
  46. __int64 size = 0;
  47. klient->getNachrichtEncrypted((char*)&size, 8);
  48. char* buffer = new char[2048];
  49. Text pf = pfad->getText();
  50. pf += "/";
  51. pf += pfa;
  52. delete[] pfa;
  53. Datei d;
  54. d.setDatei(pf);
  55. d.erstellen();
  56. d.open(Datei::Style::schreiben);
  57. while (size)
  58. {
  59. int l = size >= 2048 ? 2048 : (int)size;
  60. klient->getNachricht(buffer, l);
  61. d.schreibe(buffer, l);
  62. size -= l;
  63. }
  64. d.close();
  65. delete[] buffer;
  66. }
  67. }
  68. }
  69. if (ret == 3)
  70. {
  71. unsigned char byte = 0;
  72. klient->getNachrichtEncrypted((char*)&byte, 1);
  73. char* f = new char[byte + 1];
  74. f[(int)byte] = 0;
  75. klient->getNachrichtEncrypted(f, byte);
  76. delete[] f;
  77. }
  78. klient->sendeEncrypted("\3", 1);
  79. klient->getNachrichtEncrypted(&ret, 1);
  80. klient->trenne();
  81. klient->release();
  82. }
  83. // Destruktor
  84. KartenLeser::~KartenLeser()
  85. {
  86. DateiRemove(pfad);
  87. }
  88. // nicht constant
  89. bool KartenLeser::ladeSpielerTeamStruktur(SpielerTeamStruktur* sts)
  90. {
  91. if (!pfad->getLength())
  92. return 0;
  93. Text* pf = new Text(pfad->getText());
  94. pf->append("/sts.ltgd");
  95. Datei* datei = new Datei();
  96. datei->setDatei(pf);
  97. if (!datei->existiert() || datei->istOrdner())
  98. {
  99. datei->release();
  100. return 0;
  101. }
  102. datei->open(Datei::Style::lesen);
  103. datei->lese((char*)&sts->spielerAnzahl, 4);
  104. datei->lese((char*)&sts->teamAnzahl, 4);
  105. if (sts->spielerFarbe)
  106. sts->spielerFarbe->release();
  107. sts->spielerFarbe = new Array< int >();
  108. for (int i = 0; i < sts->spielerAnzahl; i++)
  109. {
  110. int farbe = 0;
  111. datei->lese((char*)&farbe, 4);
  112. sts->spielerFarbe->add(farbe);
  113. }
  114. if (sts->teamFarbe)
  115. sts->teamFarbe->release();
  116. sts->teamFarbe = new Array< int >();
  117. for (int i = 0; i < sts->teamAnzahl; i++)
  118. {
  119. int farbe = 0;
  120. datei->lese((char*)&farbe, 4);
  121. sts->teamFarbe->add(farbe);
  122. }
  123. if (sts->teamName)
  124. sts->teamName->release();
  125. sts->teamName = new RCArray< Text >();
  126. for (int i = 0; i < sts->teamAnzahl; i++)
  127. {
  128. unsigned char len = 0;
  129. datei->lese((char*)&len, 1);
  130. char* txt = new char[len + 1];
  131. txt[(int)len] = 0;
  132. datei->lese(txt, len);
  133. Text* name = new Text(txt);
  134. delete[] txt;
  135. sts->teamName->add(name);
  136. }
  137. if (sts->teamSize)
  138. sts->teamSize->release();
  139. sts->teamSize = new Array< int >();
  140. for (int i = 0; i < sts->teamAnzahl; i++)
  141. {
  142. int size = 0;
  143. datei->lese((char*)&size, 4);
  144. sts->teamSize->add(size);
  145. }
  146. datei->close();
  147. datei->release();
  148. return 1;
  149. }
  150. // constant
  151. Text* KartenLeser::getPfad() const
  152. {
  153. return pfad ? dynamic_cast<Text*>(pfad->getThis()) : 0;
  154. }
  155. Text* KartenLeser::zPfad() const
  156. {
  157. return pfad;
  158. }