#include "../KSGKlient.h" #include "../KSGServer.h" // Inhalt der AnmeldungKlient Klasse aus KSGKlient.h // Konstruktor AnmeldungKlient::AnmeldungKlient() { verbunden = 0; klient = 0; fehler = new Text( "" ); spielHistorie = 0; klientId = getKlientId(); ref = 1; InitializeCriticalSection( &cs ); } // Destruktor AnmeldungKlient::~AnmeldungKlient() { LOCK( &cs ); if( klient ) { char serverReturn = 0; if( verbunden ) { klient->sendeVerschlüsselt( "\4", 1 ); klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *nachricht = new char[ län + 1 ]; nachricht[ län ] = 0; klient->getNachrichtVerschlüsselt( nachricht, län ); delete[]nachricht; } klient->sendeVerschlüsselt( "\3", 1 ); klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); klient->trenne(); } else { unsigned char schlüssel[ 20 ] = { 158, 10, 37, 155, 117, 58, 28, 197, 132, 76, 252, 83, 84, 222, 11, 125, 240, 218, 25, 201 }; klient->setSendeSchlüssel( (char*)schlüssel, 20 ); klient->setEmpfangSchlüssel( (char*)schlüssel, 20 ); klient->verbinde( klient->getServerPort(), klient->getServerIp() ); klient->sendeVerschlüsselt( "\1", 1 ); klient->sendeVerschlüsselt( (char*)&klientId, 4 ); klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *nachricht = new char[ län + 1 ]; nachricht[ län ] = 0; klient->getNachrichtVerschlüsselt( nachricht, län ); delete[]nachricht; } else { char *sl = 0; char slLän = getSchlüssel( &sl ); klient->setSendeSchlüssel( sl, slLän ); klient->setEmpfangSchlüssel( sl, slLän ); delete[] sl; klient->sendeVerschlüsselt( "\4", 1 ); klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *nachricht = new char[ län + 1 ]; nachricht[ län ] = 0; klient->getNachrichtVerschlüsselt( nachricht, län ); delete[]nachricht; } } klient->sendeVerschlüsselt( "\3", 1 ); klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); klient->trenne(); } klient = klient->release(); } fehler = fehler->release(); UNLOCK( &cs ); DeleteCriticalSection( &cs ); } // nicht constant bool AnmeldungKlient::verbinde() // verbindet ich mit dem Chat Server { LOCK( &cs ); if( verbunden ) { UNLOCK( &cs ); return 1; } spielHistorie = 0; if( !klient ) { char *msIp = getMainServerIp(); unsigned short msPort = getMainServerPort(); klient = new Klient(); unsigned char schlüssel[ 20 ] = { 199, 164, 172, 55, 246, 16, 155, 8, 151, 176, 250, 181, 227, 133, 30, 41, 200, 26, 7, 151 }; klient->setSendeSchlüssel( (char*)schlüssel, 20 ); klient->setEmpfangSchlüssel( (char*)schlüssel, 20 ); if( !klient->verbinde( msPort, msIp ) ) { fehler->setText( "Fehler beim verbinden mit dem Main Server. Bitte versuche es Später erneut." ); klient = klient->release(); delete[]msIp; UNLOCK( &cs ); return 0; } delete[]msIp; klient->sende( "\0", 1 ); // Verschlüsselung aktivieren klient->sendeVerschlüsselt( "\1", 1 ); klient->sendeVerschlüsselt( (char*)&klientId, 4 ); char serverReturn = 0; klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *nachricht = new char[ län + 1 ]; nachricht[ län ] = 0; klient->getNachrichtVerschlüsselt( nachricht, län ); fehler->setText( nachricht ); delete[]nachricht; klient->sendeVerschlüsselt( "\3", 1 ); klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); klient->trenne(); klient = klient->release(); UNLOCK( &cs ); return 0; } char *sl = 0; char slLän = getSchlüssel( &sl ); klient->setSendeSchlüssel( sl, slLän ); klient->setEmpfangSchlüssel( sl, slLän ); delete[] sl; klient->sendeVerschlüsselt( "\6\6", 2 ); char byte = 0; klient->getNachrichtVerschlüsselt( &byte, 1 ); if( byte == 2 ) { unsigned char lsIp[ 4 ]; klient->getNachrichtVerschlüsselt( (char *)lsIp, 4 ); unsigned short lsPort = 0; klient->getNachrichtVerschlüsselt( (char*)&lsPort, 2 ); klient->sendeVerschlüsselt( "\3", 1 ); klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); klient->trenne(); Text *lsIpT = new Text( "" ); lsIpT->anhängen( (int)lsIp[ 0 ] ); lsIpT->anhängen( "." ); lsIpT->anhängen( (int)lsIp[ 1 ] ); lsIpT->anhängen( "." ); lsIpT->anhängen( (int)lsIp[ 2 ] ); lsIpT->anhängen( "." ); lsIpT->anhängen( (int)lsIp[ 3 ] ); unsigned char schlüssel[ 20 ] = { 158, 10, 37, 155, 117, 58, 28, 197, 132, 76, 252, 83, 84, 222, 11, 125, 240, 218, 25, 201 }; klient->setSendeSchlüssel( (char*)schlüssel, 20 ); klient->setEmpfangSchlüssel( (char*)schlüssel, 20 ); klient->verbinde( lsPort, lsIpT->getText() ); lsIpT = lsIpT->release(); klient->sendeVerschlüsselt( "\3", 1 ); klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); klient->trenne(); } if( byte == 3 ) { klient->getNachrichtVerschlüsselt( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtVerschlüsselt( f, byte ); fehler->setText( f ); delete[]f; klient->sendeVerschlüsselt( "\3", 1 ); klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); klient->trenne(); klient = klient->release(); UNLOCK( &cs ); return 0; } } unsigned char schlüssel[ 20 ] = { 158, 10, 37, 155, 117, 58, 28, 197, 132, 76, 252, 83, 84, 222, 11, 125, 240, 218, 25, 201 }; klient->setSendeSchlüssel( (char*)schlüssel, 20 ); klient->setEmpfangSchlüssel( (char*)schlüssel, 20 ); if( klient->verbinde( klient->getServerPort(), klient->getServerIp() ) ) { if( klient->sendeVerschlüsselt( "\1", 1 ) ) { klient->sendeVerschlüsselt( (char*)&klientId, 4 ); char serverReturn = 0; klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char byte = 0; klient->getNachrichtVerschlüsselt( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtVerschlüsselt( f, byte ); fehler->setText( f ); delete[]f; klient->sendeVerschlüsselt( "\3", 1 ); klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); klient->trenne(); UNLOCK( &cs ); return 0; } char *sl = 0; char slLän = getSchlüssel( &sl ); klient->setSendeSchlüssel( sl, slLän ); klient->setEmpfangSchlüssel( sl, slLän ); delete[] sl; verbunden = 1; UNLOCK( &cs ); return 1; } else { fehler->setText( "Der dir zugewiesene Anmeldung Server hat die Verbindung abgebrochen. Bitte versuche es Später erneut." ); klient = klient->release(); } } else { fehler->setText( "Der dir zugewiesene Anmeldung Server antwortet nicht. Bitte versuche es Später erneut." ); klient = klient->release(); } UNLOCK( &cs ); return 0; } int AnmeldungKlient::gruppeErstellen( int karteId ) // erstellt eine gruppe { if( !verbunden ) verbinde(); if( !verbunden ) return 0; LOCK( &cs ); klient->sendeVerschlüsselt( "\5", 1 ); char serverReturn = 0; klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } klient->sendeVerschlüsselt( (char*)&karteId, 4 ); klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } int gruppeId = 0; klient->getNachrichtVerschlüsselt( (char*)&gruppeId, 4 ); UNLOCK( &cs ); return gruppeId; } bool AnmeldungKlient::gruppeBetreten( int gruppeId, Array< int > *mitglieder, int *anzahl ) // betritt Gruppe { if( !verbunden ) verbinde(); if( !verbunden ) return 0; LOCK( &cs ); klient->sendeVerschlüsselt( "\x6", 1 ); char serverReturn = 0; klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } klient->sendeVerschlüsselt( (char*)&gruppeId, 4 ); klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } klient->getNachrichtVerschlüsselt( (char*)anzahl, 4 ); for( int i = 0; i < *anzahl; i++ ) { int id = 0; klient->getNachrichtVerschlüsselt( (char*)&id, 4 ); mitglieder->add( id, i ); } UNLOCK( &cs ); return 1; } bool AnmeldungKlient::gruppeVerlassen( int gruppeId ) // Verlässt die gruppe { if( !verbunden ) verbinde(); if( !verbunden ) return 0; LOCK( &cs ); klient->sendeVerschlüsselt( "\x7", 1 ); char serverReturn = 0; klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } klient->sendeVerschlüsselt( (char*)&gruppeId, 4 ); klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } UNLOCK( &cs ); return 1; } bool AnmeldungKlient::gruppeAnmelden( int gruppeId ) // meldet gruppe an { if( !verbunden ) verbinde(); if( !verbunden ) return 0; LOCK( &cs ); klient->sendeVerschlüsselt( "\x9", 1 ); char serverReturn = 0; klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } klient->sendeVerschlüsselt( (char*)&gruppeId, 4 ); klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } UNLOCK( &cs ); return 1; } bool AnmeldungKlient::gruppeAbmelden( int gruppeId ) // meldet gruppe ab { if( !verbunden ) verbinde(); if( !verbunden ) return 0; LOCK( &cs ); klient->sendeVerschlüsselt( "\xA", 1 ); char serverReturn = 0; klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } klient->sendeVerschlüsselt( (char*)&gruppeId, 4 ); klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } UNLOCK( &cs ); return 1; } bool AnmeldungKlient::gruppeSpielerEinladen( int accountId, int gruppeId ) // läht Spieler ein die Gruppe zu betreten { if( !verbunden ) verbinde(); if( !verbunden ) return 0; LOCK( &cs ); klient->sendeVerschlüsselt( "\xB", 1 ); char serverReturn = 0; klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } klient->sendeVerschlüsselt( (char*)&accountId, 4 ); klient->sendeVerschlüsselt( (char*)&gruppeId, 4 ); klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } UNLOCK( &cs ); return 1; } bool AnmeldungKlient::gruppeEinladungAbbrechen( int accountId, int gruppeId ) // bricht einladung ab { if( !verbunden ) verbinde(); if( !verbunden ) return 0; LOCK( &cs ); klient->sendeVerschlüsselt( "\x11", 1 ); char serverReturn = 0; klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } klient->sendeVerschlüsselt( (char*)&gruppeId, 4 ); klient->sendeVerschlüsselt( (char*)&accountId, 4 ); klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } UNLOCK( &cs ); return 1; } bool AnmeldungKlient::gruppeEinladungAblehnen( int gruppeId ) // Einladung zur Gruppe ablehnen { if( !verbunden ) verbinde(); if( !verbunden ) return 0; LOCK( &cs ); klient->sendeVerschlüsselt( "\x12", 1 ); char serverReturn = 0; klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } klient->sendeVerschlüsselt( (char*)&gruppeId, 4 ); klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } UNLOCK( &cs ); return 1; } bool AnmeldungKlient::kickSpielerAusGruppe( int accountId, int gruppeId ) // wirft Spieler aus Gruppe { if( !verbunden ) verbinde(); if( !verbunden ) return 0; LOCK( &cs ); klient->sendeVerschlüsselt( "\xC", 1 ); char serverReturn = 0; klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } klient->sendeVerschlüsselt( (char*)&accountId, 4 ); klient->sendeVerschlüsselt( (char*)&gruppeId, 4 ); klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } UNLOCK( &cs ); return 1; } bool AnmeldungKlient::gruppeSpielStarten( int gruppeId, bool spielStarten ) // startet das Spiel der Gruppe { if( !verbunden ) verbinde(); if( !verbunden ) return 0; LOCK( &cs ); klient->sendeVerschlüsselt( "\x10", 1 ); char serverReturn = 0; klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } klient->sendeVerschlüsselt( (char*)&gruppeId, 4 ); klient->sendeVerschlüsselt( (char*)&spielStarten, 1 ); klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } UNLOCK( &cs ); return 1; } bool AnmeldungKlient::gruppeNachricht( int gruppeId, char *nachricht ) // nachricht an gruppe senden { if( !verbunden ) verbinde(); if( !verbunden ) return 0; char län = textLänge( nachricht ); if( !län ) return 1; LOCK( &cs ); klient->sendeVerschlüsselt( "\xD", 1 ); char serverReturn = 0; klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } klient->sendeVerschlüsselt( (char*)&gruppeId, 4 ); klient->sendeVerschlüsselt( (char*)&län, 1 ); klient->sendeVerschlüsselt( nachricht, län ); klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } UNLOCK( &cs ); return 1; } bool AnmeldungKlient::anmelden( int karteId ) // betritt warteschlange { if( !verbunden ) verbinde(); if( !verbunden ) return 0; LOCK( &cs ); klient->sendeVerschlüsselt( "\xE", 1 ); char serverReturn = 0; klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } klient->sendeVerschlüsselt( (char*)&karteId, 4 ); klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } UNLOCK( &cs ); return 1; } bool AnmeldungKlient::abmelden() // verlässt warteschlange { if( !verbunden ) verbinde(); if( !verbunden ) return 0; LOCK( &cs ); klient->sendeVerschlüsselt( "\xF", 1 ); char serverReturn = 0; klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); if( serverReturn == 3 ) { char län = 0; klient->getNachrichtVerschlüsselt( &län, 1 ); char *message = new char[ län + 1 ]; message[ län ] = 0; klient->getNachrichtVerschlüsselt( message, län ); fehler->setText( message ); delete[] message; UNLOCK( &cs ); return 0; } UNLOCK( &cs ); return 1; } bool AnmeldungKlient::keepAlive() // Erhält die Verbindung aufrecht { if( !verbunden ) return 0; char res = 0; if( !TryEnterCriticalSection( &cs ) ) return 1; klient->sendeVerschlüsselt( "\x13", 1 ); klient->getNachrichtVerschlüsselt( &res, 1 ); UNLOCK( &cs ); if( res != 1 ) trenne(); return res == 1; } bool AnmeldungKlient::trenne() // trennt sich von dem Chat Server { if( !verbunden ) return 1; LOCK( &cs ); klient->sendeVerschlüsselt( "\3", 1 ); char serverReturn = 0; klient->getNachrichtVerschlüsselt( &serverReturn, 1 ); klient->trenne(); verbunden = 0; klient->trenne(); UNLOCK( &cs ); return 1; } // constant bool AnmeldungKlient::istVerbunden() const // prüft, ob mit Chat Server verbunden { return verbunden; } char *AnmeldungKlient::getLetzterFehler() const // gibt den Letzten Fehlertext zuück { return fehler->getText(); } // Reference Counting AnmeldungKlient *AnmeldungKlient::getThis() { ref++; return this; } AnmeldungKlient *AnmeldungKlient::release() { ref--; if( !ref ) delete this; return 0; }