123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- #include "SpielMessageProcessor.h"
- #include "../Global/Variablen.h"
- SpielMessageProcessor::SpielMessageProcessor()
- : Thread()
- {
- ref = 1;
- start();
- }
- void SpielMessageProcessor::thread()
- {
- KSGClient::SpielServerNachricht msg;
- msg.sts = new SpielerTeamStruktur();
- while( spielClient && spielClient->istVerbunden() && spielClient->getNextMessage( msg ) )
- {
- switch( msg.type )
- {
- case 0: // verbindung getrennt
- msg.sts->release();
- return;
- case 1: // verbleibende Zeit
- if( nachLogin && nachLogin->zSpielenFenster() )
- nachLogin->zSpielenFenster()->spielGefundenZeitVerbleibend( msg.sekunden );
- break;
- case 2: // SpielErstellt abbruch
- if( nachLogin && nachLogin->zNachrichtenListe() )
- nachLogin->zNachrichtenListe()->addNachricht( new Text( "Spiel Abgebrochen" ), msg.message.getThis(), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
- if( nachLogin && nachLogin->zSpielenFenster() )
- nachLogin->zSpielenFenster()->spielGefundenAbbruch();
- break;
- case 3: // Fehler
- hauptScreen->lock();
- if( nachLogin && nachLogin->zNachrichtenListe() )
- nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), msg.message.getThis(), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
- hauptScreen->unlock();
- break;
- case 4: // zurück in Warteschlange
- if( nachLogin && nachLogin->zSpielenFenster() )
- nachLogin->zSpielenFenster()->zurückInWarteschlange( msg.stunden, msg.minuten, msg.sekunden );
- break;
- case 5: // Erstellung fortsetzen
- if( nachLogin && nachLogin->zSpielenFenster() )
- nachLogin->zSpielenFenster()->teamAuswahlBetreten();
- break;
- case 6: // SpielErstellt Initialisierung
- if( nachLogin && nachLogin->zSpielenFenster() )
- nachLogin->zSpielenFenster()->teamAuswahlInit( (SpielerTeamStruktur*)msg.sts );
- else
- msg.sts->release();
- msg.sts = new SpielerTeamStruktur();
- break;
- case 7: // SpielErstellt Spieler hinzugefügt
- if( nachLogin && nachLogin->zSpielenFenster() )
- nachLogin->zSpielenFenster()->teamAuswahlAddSpieler( msg.accountId );
- break;
- case 8: // SpielErstellt Spieler entfernt
- if( nachLogin && nachLogin->zSpielenFenster() )
- nachLogin->zSpielenFenster()->teamAuswahlRemoveSpieler( msg.accountId );
- break;
- case 9: // SpielErstellt Spieler wechselt Team
- if( nachLogin && nachLogin->zSpielenFenster() )
- nachLogin->zSpielenFenster()->teamAuswahlSpielerWehseltTeam( msg.accountId, msg.spielerNummer );
- break;
- case 0xA: // SpielErstellt Chat Nachricht
- if( nachLogin && nachLogin->zSpielenFenster() )
- nachLogin->zSpielenFenster()->teamAuswahlChatNachricht( msg.message );
- break;
- case 0xB: // Spiel gefunden
- if( nachLogin && nachLogin->zSpielenFenster() )
- nachLogin->zSpielenFenster()->spielGefunden( msg.karteId );
- break;
- case 0xC: // Spiel Laden beginnen
- aktion = 5;
- break;
- case 0xD: // Spiel Laden Spieler hinzufügen
- if( nachLogin && nachLogin->zImSpiel() && nachLogin->zImSpiel()->istSichtbar() )
- nachLogin->zImSpiel()->lBAddSpieler( msg.accountId, msg.spielerNummer );
- break;
- case 0xE: // Spiel Laden Spieler Prozent
- if( nachLogin && nachLogin->zImSpiel() && nachLogin->zImSpiel()->istSichtbar() )
- nachLogin->zImSpiel()->lBSetSpielerProzent( msg.accountId, msg.prozent );
- break;
- case 0xF: // Spiel Laden Spieler Ping
- if( nachLogin && nachLogin->zImSpiel() && nachLogin->zImSpiel()->istSichtbar() )
- nachLogin->zImSpiel()->lBSetSpielerPing( msg.accountId, msg.ping );
- break;
- case 0x11: // Spiel Laden Fertig
- if( nachLogin && nachLogin->zImSpiel() && nachLogin->zImSpiel()->istSichtbar() )
- nachLogin->zImSpiel()->endLaden();
- break;
- case 0x12: // Spiel Nachricht
- if( nachLogin && nachLogin->zImSpiel() && nachLogin->zImSpiel()->istSichtbar() )
- nachLogin->zImSpiel()->spielNachricht( msg.län, msg.data );
- delete[] msg.data;
- break;
- case 0x13: // Statistik Nachricht
- if( nachLogin && nachLogin->zSpielenFenster() )
- nachLogin->zSpielenFenster()->statistikNachricht( msg.län, msg.data );
- delete[] msg.data;
- break;
- default: // Unbekannte Servernachricht
- if( nachLogin && nachLogin->zNachrichtenListe() )
- {
- hauptScreen->lock();
- nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
- new Text( "Unbekannte Nachricht vom Server. Eventuel ist der Client nicht mehr Aktuell." ),
- new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
- hauptScreen->unlock();
- }
- break;
- }
- }
- msg.sts->release();
- }
- SpielMessageProcessor *SpielMessageProcessor::getThis()
- {
- ref++;
- return this;
- }
- SpielMessageProcessor *SpielMessageProcessor::release()
- {
- if( !--ref )
- delete this;
- return 0;
- }
|