123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- #include "KartenLeser.h"
- #include <Datei.h>
- #include "AccountHistorieDaten.h"
- #include <Klient.h>
- // Inhalt der KartenLeser Klasse aus KartenLeser.h
- // Konstruktor
- KartenLeser::KartenLeser( int karteId, InformationServer *is )
- {
- pfad = new Text( "" );
- *pfad += karteId;
- while( DateiExistiert( pfad->getText() ) )
- pfad->anhängen( "_" );
- ref = 1;
- Text ip;
- int port;
- is->zDB()->getKartenServerPortIp( 0, karteId, &port, &ip );
- Klient *klient = new Klient();
- unsigned char schlüssel[ 20 ] = { 24, 15, 53, 87, 38, 73, 154, 38, 246, 90, 39, 133, 11, 199, 22, 80, 26, 132, 95, 54 };
- klient->setSendeSchlüssel( (char*)schlüssel, 20 );
- klient->setEmpfangSchlüssel( (char*)schlüssel, 20 );
- if( !klient->verbinde( (unsigned short)port, ip ) )
- {
- klient = klient->release();
- return;
- }
- klient->sendeVerschlüsselt( "\x7", 1 );
- char ret = 0;
- klient->getNachrichtVerschlüsselt( &ret, 1 );
- if( ret == 1 )
- {
- klient->sendeVerschlüsselt( (char*)&karteId, 4 );
- klient->getNachrichtVerschlüsselt( &ret, 1 );
- if( ret == 1 )
- {
- int anz = 0;
- klient->getNachrichtVerschlüsselt( (char*)&anz, 4 );
- for( int i = 0; i < anz; i++ )
- {
- char län = 0;
- klient->getNachrichtVerschlüsselt( &län, 1 );
- if( !län )
- continue;
- char *pfa = new char[ län + 1 ];
- pfa[ län ] = 0;
- klient->getNachrichtVerschlüsselt( pfa, län );
- __int64 größe = 0;
- klient->getNachrichtVerschlüsselt( (char*)&größe, 8 );
- char *buffer = new char[ 2048 ];
- Text pf = pfad->getText();
- pf += "/";
- pf += pfa;
- delete[] pfa;
- Datei d;
- d.setDatei( pf );
- d.erstellen();
- d.öffnen( Datei::Style::schreiben );
- while( größe )
- {
- int l = größe >= 2048 ? 2048 : (int)größe;
- klient->getNachricht( buffer, l );
- d.schreibe( buffer, l );
- größe -= l;
- }
- d.schließen();
- delete[] buffer;
- }
- }
- }
- if( ret == 3 )
- {
- char byte = 0;
- klient->getNachrichtVerschlüsselt( &byte, 1 );
- char *f = new char[ byte + 1 ];
- f[ byte ] = 0;
- klient->getNachrichtVerschlüsselt( f, byte );
- delete[] f;
- }
- klient->sendeVerschlüsselt( "\3", 1 );
- klient->getNachrichtVerschlüsselt( &ret, 1 );
- klient->trenne();
- klient->release();
- }
- // Destruktor
- KartenLeser::~KartenLeser()
- {
- DateiLöschen( pfad );
- }
- // nicht constant
- bool KartenLeser::ladeSpielerTeamStruktur( SpielerTeamStruktur *sts )
- {
- if( !pfad->getLänge() )
- return 0;
- Text *pf = new Text( pfad->getText() );
- pf->anhängen( "/sts.ltgd" );
- Datei *datei = new Datei();
- datei->setDatei( pf );
- if( !datei->existiert() || datei->istOrdner() )
- {
- datei->release();
- return 0;
- }
- datei->öffnen( Datei::Style::lesen );
- datei->lese( (char*)&sts->spielerAnzahl, 4 );
- datei->lese( (char*)&sts->teamAnzahl, 4 );
- if( sts->spielerFarbe )
- sts->spielerFarbe->release();
- sts->spielerFarbe = new Array< int >();
- for( int i = 0; i < sts->spielerAnzahl; i++ )
- {
- int farbe = 0;
- datei->lese( (char*)&farbe, 4 );
- sts->spielerFarbe->set( farbe, i );
- }
- if( sts->teamFarbe )
- sts->teamFarbe->release();
- sts->teamFarbe = new Array< int >();
- for( int i = 0; i < sts->teamAnzahl; i++ )
- {
- int farbe = 0;
- datei->lese( (char*)&farbe, 4 );
- sts->teamFarbe->set( farbe, i );
- }
- if( sts->teamName )
- sts->teamName->release();
- sts->teamName = new RCArray< Text >();
- for( int i = 0; i < sts->teamAnzahl; i++ )
- {
- char län = 0;
- datei->lese( &län, 1 );
- char *txt = new char[ län + 1 ];
- txt[ län ] = 0;
- datei->lese( txt, län );
- Text *name = new Text( txt );
- delete[] txt;
- sts->teamName->set( name, i );
- }
- if( sts->teamGröße )
- sts->teamGröße->release();
- sts->teamGröße = new Array< int >();
- for( int i = 0; i < sts->teamAnzahl; i++ )
- {
- int größe = 0;
- datei->lese( (char*)&größe, 4 );
- sts->teamGröße->set( größe, i );
- }
- datei->schließen();
- datei->release();
- return 1;
- }
- // constant
- Text *KartenLeser::getPfad() const
- {
- return pfad ? pfad->getThis() : 0;
- }
- Text *KartenLeser::zPfad() const
- {
- return pfad;
- }
- // Reference Counting
- KartenLeser *KartenLeser::getThis()
- {
- ref++;
- return this;
- }
- KartenLeser *KartenLeser::release()
- {
- ref--;
- if( !ref )
- delete this;
- return 0;
- }
|