TeamsEditor.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #include "TeamsEditor.h"
  2. #include <Datei.h>
  3. #include <DateiSystem.h>
  4. #include <Bild.h>
  5. // Inhalt der TeamsEditor Klasse aus TeamsEditor.h
  6. // Konstruktor
  7. TeamsEditor::TeamsEditor(int id, const char* pf, EdSDatenbank* db)
  8. : ReferenceCounter()
  9. {
  10. pfad = pf;
  11. pfad += "/live/map";
  12. fehler = "";
  13. this->id = id;
  14. this->db = db;
  15. }
  16. // Destruktor
  17. TeamsEditor::~TeamsEditor()
  18. {
  19. db->release();
  20. }
  21. // nicht constant
  22. bool TeamsEditor::prozessMessage(SKlient* zKlient)
  23. {
  24. char message = 0;
  25. zKlient->getNachrichtEncrypted(&message, 1);
  26. switch (message)
  27. {
  28. case 0x1: // Team Struktur laden
  29. {
  30. Text p = pfad.getText();
  31. p += "/server/sts.ltgd";
  32. Datei d;
  33. d.setDatei(p);
  34. if (!d.open(Datei::Style::lesen))
  35. {
  36. fehler = "Es ist ein Fehler beim laden der Einstellungen aufgetreten.";
  37. return 0;
  38. }
  39. zKlient->sendeEncrypted("\1", 1);
  40. char* buffer = new char[2048];
  41. int gr = (int)d.getSize();
  42. while (gr > 0)
  43. {
  44. int l = gr > 2048 ? 2048 : gr;
  45. d.lese(buffer, l);
  46. zKlient->sendeEncrypted(buffer, l);
  47. gr -= l;
  48. }
  49. delete[] buffer;
  50. d.close();
  51. return 1;
  52. }
  53. case 0x2: // Team Struktur speichern
  54. {
  55. Text p = pfad.getText();
  56. p += "/server/sts.ltgd";
  57. Datei d1;
  58. d1.setDatei(p);
  59. if (!d1.existiert())
  60. d1.erstellen();
  61. p = pfad.getText();
  62. p += "/client/map/data/data.sts";
  63. Datei d2;
  64. d2.setDatei(p);
  65. if (!d2.existiert())
  66. d2.erstellen();
  67. if (d1.open(Datei::Style::schreiben) && d2.open(Datei::Style::schreiben))
  68. zKlient->sendeEncrypted("\1", 1);
  69. else
  70. {
  71. d1.close();
  72. d2.close();
  73. fehler = "Es ist ein Fehler beim speichern der Einstellungen aufgetreten.";
  74. return 0;
  75. }
  76. int sAnz = 0;
  77. zKlient->getNachrichtEncrypted((char*)&sAnz, 4);
  78. d1.schreibe((char*)&sAnz, 4);
  79. d2.schreibe((char*)&sAnz, 4);
  80. db->setMaxSpieler(id, sAnz);
  81. int tAnz = 0;
  82. zKlient->getNachrichtEncrypted((char*)&tAnz, 4);
  83. d1.schreibe((char*)&tAnz, 4);
  84. d2.schreibe((char*)&tAnz, 4);
  85. for (int i = 0; i < sAnz; i++)
  86. { // Spielerfarbe
  87. int f = 0;
  88. zKlient->getNachrichtEncrypted((char*)&f, 4);
  89. d1.schreibe((char*)&f, 4);
  90. d2.schreibe((char*)&f, 4);
  91. }
  92. for (int i = 0; i < tAnz; i++)
  93. { // Teamfarbe
  94. int f = 0;
  95. zKlient->getNachrichtEncrypted((char*)&f, 4);
  96. d1.schreibe((char*)&f, 4);
  97. d2.schreibe((char*)&f, 4);
  98. }
  99. for (int i = 0; i < tAnz; i++)
  100. { // Teamname
  101. unsigned char l = 0;
  102. zKlient->getNachrichtEncrypted((char*)&l, 1);
  103. char* txt = new char[l + 1];
  104. txt[(int)l] = 0;
  105. zKlient->getNachrichtEncrypted(txt, l);
  106. d1.schreibe((char*)&l, 1);
  107. d2.schreibe((char*)&l, 1);
  108. d1.schreibe(txt, l);
  109. d2.schreibe(txt, l);
  110. delete[] txt;
  111. }
  112. for (int i = 0; i < tAnz; i++)
  113. { // Teamgröße
  114. int g = 0;
  115. zKlient->getNachrichtEncrypted((char*)&g, 4);
  116. d1.schreibe((char*)&g, 4);
  117. d2.schreibe((char*)&g, 4);
  118. }
  119. d1.close();
  120. d2.close();
  121. return 1;
  122. }
  123. default:
  124. fehler = "Unbekannte Nachricht. Eventuell ist der Client nicht auf dem neusten Stand.";
  125. }
  126. return 0;
  127. }
  128. // constant
  129. const char* TeamsEditor::getLetzterFehler() const
  130. {
  131. return fehler;
  132. }