#include "FactoryClient.h"

using namespace Network;

FactoryClient::FactoryClient()
{
    client = 0;
    connected = 0;
    reader = 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;
    connected = 1;
    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;
    reader = new NetworkReader( client );
    return true;
}

void FactoryClient::disconnect()
{
    if( client )
    {
        if( connected )
            client->sende( "\2", 1 );
        delete reader;
        client->trenne();
        client->release();
        client = 0;
    }
}

NetworkReader *FactoryClient::getNextMessage()
{
    if( !client )
        return 0;
    if( !client->hatNachricht( 0 ) )
        return 0;
    char type = 0;
    if( !client->getNachricht( &type, 1 ) )
        return 0;
    if( type == 1 )
    {
        client->trenne();
        client->release();
        client = 0;
        return 0;
    }
    if( !client->hatNachricht( 0 ) )
        return 0;
    return reader;
}