TeamsEditor.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  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, char *pf, EdSDatenbank *db )
  8. {
  9. pfad = pf;
  10. pfad += "/live/map";
  11. fehler = "";
  12. this->id = id;
  13. this->db = db;
  14. ref = 1;
  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. char *TeamsEditor::getLetzterFehler() const
  130. {
  131. return fehler;
  132. }
  133. // Reference Counting
  134. TeamsEditor *TeamsEditor::getThis()
  135. {
  136. ref++;
  137. return this;
  138. }
  139. TeamsEditor *TeamsEditor::release()
  140. {
  141. ref--;
  142. if( !ref )
  143. delete this;
  144. return 0;
  145. }