123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308 |
- #include "ChatMessageProcessor.h"
- #include "../Global/Variablen.h"
- ChatMessageProcessor::ChatMessageProcessor()
- : Thread()
- {
- ref = 1;
- start();
- }
- void ChatMessageProcessor::thread()
- {
- KSGClient::ChatServerNachricht msg;
- while( chatClient && chatClient->istVerbunden() && chatClient->getNextMessage( msg ) )
- {
- switch( msg.type )
- {
- case 0: // verbindung getrennt
- return;
- case 1: // kick
- loginClient->trenne( 0 );
- infoClient->trenne( 0 );
- chatClient->trenne( 0 );
- cmProcessor = cmProcessor->release();
- aktion = 4;
- break;
- case 2: // Server Ausgelastet
- aktion = 1;
- if( nachLogin && nachLogin->zNachrichtenListe() )
- {
- hauptScreen->lock();
- nachLogin->zNachrichtenListe()->addNachricht( new Text( "Server Ausgelastet" ),
- new Text( "Der Chat Server ist derzeit ausgelastet. Es wird versucht auf einen anderen Server auszuweichen." ),
- new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
- hauptScreen->unlock();
- }
- 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: // Chat Nachricht
- if( nachLogin && nachLogin->zChatLeiste() )
- {
- hauptScreen->lock();
- nachLogin->zChatLeiste()->chatNachricht( msg.account, msg.message );
- hauptScreen->unlock();
- }
- break;
- case 5: // Spiel Einladung
- if( nachLogin && nachLogin->zNachrichtenListe() )
- {
- int karteId = infoClient->getGruppenKarteId( msg.gruppe );
- int spielId = infoClient->getSpielId( karteId );
- Text *spiel = infoClient->getSpielName( spielId );
- Text *karte = infoClient->getKarteName( karteId );
- Text *name = infoClient->getSpielerName( msg.account );
- Text *titel = new Text( "Spiel Einladung" );
- Text *nachricht = new Text( "Von: " );
- nachricht->append( name );
- nachricht->append( "\nSpiel: " );
- nachricht->append( spiel );
- nachricht->append( "\nKarte: " );
- nachricht->append( karte );
- SpielEinladungParam *param = new SpielEinladungParam();
- param->gruppeId = msg.gruppe;
- param->vonAccount = msg.account;
- hauptScreen->lock();
- nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "annehmen" ), new Text( "ablehnen" ), NachrichtType::spielEinladung, param );
- hauptScreen->unlock();
- }
- break;
- case 6: // Account Status ändert sich
- hauptScreen->lock();
- if( nachLogin && nachLogin->zNachrichtenListe() )
- nachLogin->zFreundesListe()->setStatus( msg.account, msg.message );
- hauptScreen->unlock();
- break;
- case 7: // Account Name ändert sich
- hauptScreen->lock();
- if( nachLogin && nachLogin->zNachrichtenListe() )
- nachLogin->zFreundesListe()->setName( msg.account, msg.message );
- hauptScreen->unlock();
- break;
- case 8: // kein Freund mehr
- hauptScreen->lock();
- if( nachLogin && nachLogin->zNachrichtenListe() )
- nachLogin->zFreundesListe()->removeMember( msg.account );
- hauptScreen->unlock();
- break;
- case 9: // Freundesanfrage
- if( nachLogin && nachLogin->zNachrichtenListe() )
- {
- Text *titel = new Text( "Freundeseinladung" );
- Text *nachricht = new Text( "" );
- nachricht->append( infoClient->getSpielerName( msg.account ) );
- nachricht->append( " möchte sich mit dir befreunden." );
- int *accountId = new int;
- *accountId = msg.account;
- hauptScreen->lock();
- if( nachLogin && nachLogin->zNachrichtenListe() )
- {
- nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "annehmen" ), new Text( "ablehnen" ),
- NachrichtType::freundEinladung, (void*)accountId );
- }
- hauptScreen->unlock();
- }
- break;
- case 0xA: // Neuer Freund
- hauptScreen->lock();
- if( nachLogin && nachLogin->zNachrichtenListe() )
- nachLogin->zFreundesListe()->addMember( msg.account );
- hauptScreen->unlock();
- break;
- case 0xB: // Freundesanfrage abgelehnt
- if( nachLogin && nachLogin->zNachrichtenListe() )
- {
- Text *titel = new Text( "Freundeseinladung Abgelehnt" );
- Text *nachricht = new Text( "" );
- nachricht->append( infoClient->getSpielerName( msg.account ) );
- nachricht->append( " hat deine Freundesanfrage abgelehnt." );
- hauptScreen->lock();
- nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
- hauptScreen->unlock();
- }
- break;
- case 0xC: // Einladung zum Chatroom
- if( nachLogin && nachLogin->zNachrichtenListe() )
- {
- Text *titel = new Text( "Chatroom Einladung" );
- Text *nachricht = new Text( "" );
- nachricht->append( infoClient->getSpielerName( msg.account ) );
- nachricht->append( " lädt dich dazu ein das Chatroom '" );
- nachricht->append( infoClient->getChatroomName( msg.chatroom ) );
- nachricht->append( "' zu betreten." );
- ChatroomEinladungParam *param = new ChatroomEinladungParam();
- param->chatroomId = msg.chatroom;
- param->vonAccount = msg.account;
- nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "betreten" ), new Text( "ablehnen" ), NachrichtType::chatroomEinladung, param );
- }
- break;
- case 0xD: // Einladung zum Chatroom abgelehnt
- if( nachLogin && nachLogin->zNachrichtenListe() )
- {
- Text *titel = new Text( "Chatroom Einladung Abgelehnt" );
- Text *nachricht = new Text( "" );
- nachricht->append( infoClient->getSpielerName( msg.account ) );
- nachricht->append( " möchte dem Chatroom '" );
- nachricht->append( infoClient->getChatroomName( msg.chatroom ) );
- nachricht->append( "' nicht beitreten." );
- hauptScreen->lock();
- nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
- hauptScreen->unlock();
- }
- break;
- case 0xE: // Spieler betritt Chatroom
- hauptScreen->lock();
- if( nachLogin && nachLogin->zChatLeiste() )
- nachLogin->zChatLeiste()->addSpieler( msg.chatroom, msg.account );
- hauptScreen->unlock();
- break;
- case 0xF: // Chatroom Nachricht
- hauptScreen->lock();
- if( nachLogin && nachLogin->zChatLeiste() )
- nachLogin->zChatLeiste()->chatroomNachricht( msg.chatroom, msg.account, msg.message );
- hauptScreen->unlock();
- break;
- case 0x10: // Spieler verlässt Chatroom
- hauptScreen->lock();
- if( nachLogin && nachLogin->zChatLeiste() )
- nachLogin->zChatLeiste()->removeSpieler( msg.chatroom, msg.account );
- hauptScreen->unlock();
- break;
- case 0x11: // Freunde
- {
- char freundeAnzahl = msg.ids.getEintragAnzahl();
- for( int i = 0; i < freundeAnzahl; i++ )
- {
- if( nachLogin )
- {
- while( !nachLogin->zFreundesListe() )
- {
- Sleep( 50 );
- }
- hauptScreen->lock();
- nachLogin->zFreundesListe()->addMember( msg.ids.get( i ) );
- hauptScreen->unlock();
- }
- }
- break;
- }
- case 0x12: // Spieler im Chatroom
- {
- char anzahl = msg.ids.getEintragAnzahl();
- for( char i = 0; i < anzahl; i++ )
- {
- hauptScreen->lock();
- if( nachLogin && nachLogin->zChatLeiste() )
- nachLogin->zChatLeiste()->addSpieler( msg.chatroom, msg.ids.get( i ) );
- hauptScreen->unlock();
- }
- break;
- }
- case 0x13: // Freund online
- hauptScreen->lock();
- if( nachLogin && nachLogin->zFreundesListe() )
- nachLogin->zFreundesListe()->setOnline( msg.account, 1 );
- hauptScreen->unlock();
- break;
- case 0x14: // Freund offline
- hauptScreen->lock();
- if( nachLogin && nachLogin->zFreundesListe() )
- nachLogin->zFreundesListe()->setOnline( msg.account, 0 );
- hauptScreen->unlock();
- break;
- case 0x15: // Chatroom Admin
- hauptScreen->lock();
- if( nachLogin && nachLogin->zChatLeiste() )
- nachLogin->zChatLeiste()->setChatroomAdmin( msg.account );
- hauptScreen->unlock();
- break;
- case 0x16: // Chatroom Kick
- hauptScreen->lock();
- if( nachLogin && nachLogin->zChatLeiste() )
- nachLogin->zChatLeiste()->removeChat( 0, msg.chatroom );
- hauptScreen->unlock();
- break;
- case 0x17: // Spieler betritt Gruppe
- if( nachLogin && nachLogin->zSpielenFenster() )
- nachLogin->zSpielenFenster()->spielerBetrittGruppe( msg.gruppe, msg.account );
- break;
- case 0x18: // Spieler verlässt Gruppe
- if( nachLogin && nachLogin->zSpielenFenster() )
- nachLogin->zSpielenFenster()->spielerVerlässtGruppe( msg.gruppe, msg.account );
- break;
- case 0x19: // gruppe Nachricht
- if( nachLogin && nachLogin->zSpielenFenster() )
- nachLogin->zSpielenFenster()->gruppeNachricht( msg.gruppe, msg.message );
- break;
- case 0x1A: // gruppe Angemeldet
- if( nachLogin && nachLogin->zSpielenFenster() )
- nachLogin->zSpielenFenster()->gruppeAnmelden( msg.gruppe );
- break;
- case 0x1B: // gruppe Abgemeldet
- if( nachLogin && nachLogin->zSpielenFenster() )
- nachLogin->zSpielenFenster()->gruppeAbmelden( msg.gruppe );
- break;
- case 0x1C: // gruppe Spiel starten
- if( nachLogin && nachLogin->zSpielenFenster() )
- nachLogin->zSpielenFenster()->setGruppeSpielStarten( msg.gruppe, msg.account == 1 );
- break;
- case 0x1D: // kick aus Gruppe
- if( nachLogin && nachLogin->zSpielenFenster() )
- nachLogin->zSpielenFenster()->kickAusGruppe( msg.gruppe );
- break;
- case 0x1E: // gruppe Admin
- if( nachLogin && nachLogin->zSpielenFenster() )
- nachLogin->zSpielenFenster()->setGruppeAdmin( msg.gruppe, msg.account );
- break;
- case 0x1F: // gruppe Einladung abgelehnt
- if( nachLogin && nachLogin->zSpielenFenster() )
- nachLogin->zSpielenFenster()->gruppeEinadungAbgelehnt( msg.gruppe, msg.account );
- break;
- case 0x20: // SpielServer Verbindungs Anfrage
- if( smProcessor )
- smProcessor = smProcessor->release();
- if( spielClient )
- spielClient = spielClient->release();
- spielClient = msg.client;
- spielClient->verbinde();
- smProcessor = new SpielMessageProcessor();
- break;
- case 0x21: // Gruppe Einladung abgebrochen
- if( nachLogin && nachLogin->zSpielenFenster() )
- nachLogin->zSpielenFenster()->gruppeEinladungAbgebrochen( msg.gruppe, msg.account );
- break;
- case 0x22: // Gruppe Einladung hinzufügen
- if( nachLogin && nachLogin->zSpielenFenster() )
- nachLogin->zSpielenFenster()->gruppeEinladungNeu( msg.gruppe, msg.account );
- 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;
- }
- }
- }
- ChatMessageProcessor *ChatMessageProcessor::getThis()
- {
- ref++;
- return this;
- }
- ChatMessageProcessor *ChatMessageProcessor::release()
- {
- if( !--ref )
- delete this;
- return 0;
- }
|