#include "SpielMessageProcessor.h" #include "../Global/Variablen.h" SpielMessageProcessor::SpielMessageProcessor() : Thread() { 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" ), dynamic_cast( msg.message.getThis() ), new Text( "Ok" ), 0 ); if( nachLogin && nachLogin->zSpielenFenster() ) nachLogin->zSpielenFenster()->spielGefundenAbbruch(); break; case 3: // Fehler uiFactory.initParam.bildschirm->lock(); if( nachLogin && nachLogin->zNachrichtenListe() ) nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), dynamic_cast( msg.message.getThis() ), new Text( "Ok" ), 0 ); uiFactory.initParam.bildschirm->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() ) { uiFactory.initParam.bildschirm->lock(); nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Unbekannte Nachricht vom Server. Eventuel ist der Client nicht mehr Aktuell." ), new Text( "Ok" ), 0 ); uiFactory.initParam.bildschirm->unlock(); } break; } } msg.sts->release(); }