SpielMessageProcessor.cpp 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #include "SpielMessageProcessor.h"
  2. #include "../Global/Variablen.h"
  3. SpielMessageProcessor::SpielMessageProcessor()
  4. : Thread()
  5. {
  6. ref = 1;
  7. start();
  8. }
  9. void SpielMessageProcessor::thread()
  10. {
  11. KSGClient::SpielServerNachricht msg;
  12. msg.sts = new SpielerTeamStruktur();
  13. while( spielClient && spielClient->istVerbunden() && spielClient->getNextMessage( msg ) )
  14. {
  15. switch( msg.type )
  16. {
  17. case 0: // verbindung getrennt
  18. msg.sts->release();
  19. return;
  20. case 1: // verbleibende Zeit
  21. if( nachLogin && nachLogin->zSpielenFenster() )
  22. nachLogin->zSpielenFenster()->spielGefundenZeitVerbleibend( msg.sekunden );
  23. break;
  24. case 2: // SpielErstellt abbruch
  25. if( nachLogin && nachLogin->zNachrichtenListe() )
  26. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Spiel Abgebrochen" ), msg.message.getThis(), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
  27. if( nachLogin && nachLogin->zSpielenFenster() )
  28. nachLogin->zSpielenFenster()->spielGefundenAbbruch();
  29. break;
  30. case 3: // Fehler
  31. hauptScreen->lock();
  32. if( nachLogin && nachLogin->zNachrichtenListe() )
  33. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), msg.message.getThis(), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
  34. hauptScreen->unlock();
  35. break;
  36. case 4: // zurück in Warteschlange
  37. if( nachLogin && nachLogin->zSpielenFenster() )
  38. nachLogin->zSpielenFenster()->zurückInWarteschlange( msg.stunden, msg.minuten, msg.sekunden );
  39. break;
  40. case 5: // Erstellung fortsetzen
  41. if( nachLogin && nachLogin->zSpielenFenster() )
  42. nachLogin->zSpielenFenster()->teamAuswahlBetreten();
  43. break;
  44. case 6: // SpielErstellt Initialisierung
  45. if( nachLogin && nachLogin->zSpielenFenster() )
  46. nachLogin->zSpielenFenster()->teamAuswahlInit( (SpielerTeamStruktur*)msg.sts );
  47. else
  48. msg.sts->release();
  49. msg.sts = new SpielerTeamStruktur();
  50. break;
  51. case 7: // SpielErstellt Spieler hinzugefügt
  52. if( nachLogin && nachLogin->zSpielenFenster() )
  53. nachLogin->zSpielenFenster()->teamAuswahlAddSpieler( msg.accountId );
  54. break;
  55. case 8: // SpielErstellt Spieler entfernt
  56. if( nachLogin && nachLogin->zSpielenFenster() )
  57. nachLogin->zSpielenFenster()->teamAuswahlRemoveSpieler( msg.accountId );
  58. break;
  59. case 9: // SpielErstellt Spieler wechselt Team
  60. if( nachLogin && nachLogin->zSpielenFenster() )
  61. nachLogin->zSpielenFenster()->teamAuswahlSpielerWehseltTeam( msg.accountId, msg.spielerNummer );
  62. break;
  63. case 0xA: // SpielErstellt Chat Nachricht
  64. if( nachLogin && nachLogin->zSpielenFenster() )
  65. nachLogin->zSpielenFenster()->teamAuswahlChatNachricht( msg.message );
  66. break;
  67. case 0xB: // Spiel gefunden
  68. if( nachLogin && nachLogin->zSpielenFenster() )
  69. nachLogin->zSpielenFenster()->spielGefunden( msg.karteId );
  70. break;
  71. case 0xC: // Spiel Laden beginnen
  72. aktion = 5;
  73. break;
  74. case 0xD: // Spiel Laden Spieler hinzufügen
  75. if( nachLogin && nachLogin->zImSpiel() && nachLogin->zImSpiel()->istSichtbar() )
  76. nachLogin->zImSpiel()->lBAddSpieler( msg.accountId, msg.spielerNummer );
  77. break;
  78. case 0xE: // Spiel Laden Spieler Prozent
  79. if( nachLogin && nachLogin->zImSpiel() && nachLogin->zImSpiel()->istSichtbar() )
  80. nachLogin->zImSpiel()->lBSetSpielerProzent( msg.accountId, msg.prozent );
  81. break;
  82. case 0xF: // Spiel Laden Spieler Ping
  83. if( nachLogin && nachLogin->zImSpiel() && nachLogin->zImSpiel()->istSichtbar() )
  84. nachLogin->zImSpiel()->lBSetSpielerPing( msg.accountId, msg.ping );
  85. break;
  86. case 0x11: // Spiel Laden Fertig
  87. if( nachLogin && nachLogin->zImSpiel() && nachLogin->zImSpiel()->istSichtbar() )
  88. nachLogin->zImSpiel()->endLaden();
  89. break;
  90. case 0x12: // Spiel Nachricht
  91. if( nachLogin && nachLogin->zImSpiel() && nachLogin->zImSpiel()->istSichtbar() )
  92. nachLogin->zImSpiel()->spielNachricht( msg.län, msg.data );
  93. delete[] msg.data;
  94. break;
  95. case 0x13: // Statistik Nachricht
  96. if( nachLogin && nachLogin->zSpielenFenster() )
  97. nachLogin->zSpielenFenster()->statistikNachricht( msg.län, msg.data );
  98. delete[] msg.data;
  99. break;
  100. default: // Unbekannte Servernachricht
  101. if( nachLogin && nachLogin->zNachrichtenListe() )
  102. {
  103. hauptScreen->lock();
  104. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
  105. new Text( "Unbekannte Nachricht vom Server. Eventuel ist der Client nicht mehr Aktuell." ),
  106. new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
  107. hauptScreen->unlock();
  108. }
  109. break;
  110. }
  111. }
  112. msg.sts->release();
  113. }
  114. SpielMessageProcessor *SpielMessageProcessor::getThis()
  115. {
  116. ref++;
  117. return this;
  118. }
  119. SpielMessageProcessor *SpielMessageProcessor::release()
  120. {
  121. if( !--ref )
  122. delete this;
  123. return 0;
  124. }