123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- #include "FactoryClient.h"
- using namespace Network;
- FactoryClient::FactoryClient()
- {
- client = 0;
- background = 0;
- foreground = 0;
- backgroundReader = 0;
- foregroundReader = 0;
- bgReaderUsage = 0;
- fgReaderUsage = 0;
- }
- FactoryClient::~FactoryClient()
- {
- if( client )
- disconnect();
- }
- bool FactoryClient::connect( Text ip, short port, int accountId, Text secret )
- {
- if( client )
- disconnect();
- client = new SSLKlient();
- if( !client->verbinde( port, ip ) )
- return false;
- if( !client->sende( "\1", 1 ) )
- return false;
- if( !client->sende( (char*)&accountId, 4 ) )
- return false;
- unsigned char len = (unsigned char)secret.getLength();
- if( !client->sende( (char*)&len, 1 ) )
- return false;
- if( !client->sende( secret, len ) )
- return false;
- char result = 0;
- if( !client->getNachricht( &result, 1 ) || result != 1 )
- return false;
- int keyLen;
- if( !client->getNachricht( (char*)&keyLen, 4 ) )
- return false;
- char* key = new char[ keyLen ];
- if( !client->getNachricht( key, keyLen ) )
- return false;
- int p;
- if( !client->getNachricht( (char*)&p, 4 ) )
- return false;
- foreground = new Klient();
- if( !foreground->verbinde( p, ip ) )
- return false;
- unsigned short l = (unsigned short)keyLen;
- if( !foreground->sende( (char*)&l, 2 ) )
- return false;
- if( !foreground->sende( key, keyLen ) )
- return false;
- bool bg = 0;
- if( !foreground->sende( (char*)&bg, 1 ) )
- return false;
- foregroundReader = new NetworkReader( foreground );
- background = new Klient();
- if( !background->verbinde( p, ip ) )
- return false;
- if( !background->sende( (char*)&l, 2 ) )
- return false;
- if( !background->sende( key, keyLen ) )
- return false;
- bg = 1;
- if( !background->sende( (char*)&bg, 1 ) )
- return false;
- backgroundReader = new NetworkReader( background );
- client->trenne();
- return true;
- }
- void FactoryClient::disconnect()
- {
- if( client )
- {
- NetworkReader* fgReader = foregroundReader;
- NetworkReader* bgReader = backgroundReader;
- backgroundReader = 0;
- foregroundReader = 0;
- if( foreground )
- foreground->trenne();
- if( background )
- background->trenne();
- while( fgReaderUsage > 0 || bgReaderUsage > 0 )
- Sleep( 100 );
- delete fgReader;
- delete bgReader;
- client->release();
- client = 0;
- if( foreground )
- foreground->release();
- foreground = 0;
- if( background )
- background->release();
- background = 0;
- }
- }
- NetworkReader* FactoryClient::getNextForegroundMessage()
- {
- fgReaderUsage++;
- if( !foreground )
- return 0;
- if( !foreground->hatNachricht( 0 ) )
- return 0;
- return foregroundReader;
- }
- NetworkReader* FactoryClient::getNextBackgroundMessage()
- {
- bgReaderUsage++;
- if( !background )
- return 0;
- if( !background->hatNachricht( 0 ) )
- return 0;
- return backgroundReader;
- }
- void FactoryClient::endMessageReading( bool bg )
- {
- if( bg )
- bgReaderUsage--;
- else
- fgReaderUsage--;
- }
- void FactoryClient::sendPlayerAction( void* data, unsigned short length )
- {
- if( !foreground )
- return;
- cs.lock();
- length += 1;
- foreground->sende( (char*)&length, 2 );
- char msgId = 2;
- foreground->sende( &msgId, 1 );
- foreground->sende( (char*)data, length - 1 );
- cs.unlock();
- }
|