#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; }