TeamsEditor.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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. p = pfad.getText();
  60. p += "/client/map/data/data.sts";
  61. Datei d2;
  62. d2.setDatei( p );
  63. if( d1.open( Datei::Style::schreiben ) && d2.open( Datei::Style::schreiben ) )
  64. zKlient->sendeEncrypted( "\1", 1 );
  65. else
  66. {
  67. d1.close();
  68. d2.close();
  69. fehler = "Es ist ein Fehler beim speichern der Einstellungen aufgetreten.";
  70. return 0;
  71. }
  72. int sAnz = 0;
  73. zKlient->getNachrichtEncrypted( (char*)&sAnz, 4 );
  74. d1.schreibe( (char*)&sAnz, 4 );
  75. d2.schreibe( (char*)&sAnz, 4 );
  76. db->setMaxSpieler( id, sAnz );
  77. int tAnz = 0;
  78. zKlient->getNachrichtEncrypted( (char*)&tAnz, 4 );
  79. d1.schreibe( (char*)&tAnz, 4 );
  80. d2.schreibe( (char*)&tAnz, 4 );
  81. for( int i = 0; i < sAnz; i++ )
  82. { // Spielerfarbe
  83. int f = 0;
  84. zKlient->getNachrichtEncrypted( (char*)&f, 4 );
  85. d1.schreibe( (char*)&f, 4 );
  86. d2.schreibe( (char*)&f, 4 );
  87. }
  88. for( int i = 0; i < tAnz; i++ )
  89. { // Teamfarbe
  90. int f = 0;
  91. zKlient->getNachrichtEncrypted( (char*)&f, 4 );
  92. d1.schreibe( (char*)&f, 4 );
  93. d2.schreibe( (char*)&f, 4 );
  94. }
  95. for( int i = 0; i < tAnz; i++ )
  96. { // Teamname
  97. char l = 0;
  98. zKlient->getNachrichtEncrypted( &l, 1 );
  99. char *txt = new char[ l + 1 ];
  100. txt[ (int)l ] = 0;
  101. zKlient->getNachrichtEncrypted( txt, l );
  102. d1.schreibe( &l, 1 );
  103. d2.schreibe( &l, 1 );
  104. d1.schreibe( txt, l );
  105. d2.schreibe( txt, l );
  106. delete[] txt;
  107. }
  108. for( int i = 0; i < tAnz; i++ )
  109. { // Teamgröße
  110. int g = 0;
  111. zKlient->getNachrichtEncrypted( (char*)&g, 4 );
  112. d1.schreibe( (char*)&g, 4 );
  113. d2.schreibe( (char*)&g, 4 );
  114. }
  115. d1.close();
  116. d2.close();
  117. return 1;
  118. }
  119. default:
  120. fehler = "Unbekannte Nachricht. Eventuell ist der Client nicht auf dem neusten Stand.";
  121. }
  122. return 0;
  123. }
  124. // constant
  125. char *TeamsEditor::getLetzterFehler() const
  126. {
  127. return fehler;
  128. }
  129. // Reference Counting
  130. TeamsEditor *TeamsEditor::getThis()
  131. {
  132. ref++;
  133. return this;
  134. }
  135. TeamsEditor *TeamsEditor::release()
  136. {
  137. ref--;
  138. if( !ref )
  139. delete this;
  140. return 0;
  141. }