Commit b75ce3e2 authored by Marco De Marco's avatar Marco De Marco
Browse files

Abstract methods for client added

parent 6ea38b9e
Loading
Loading
Loading
Loading
+61 −2
Original line number Diff line number Diff line
@@ -125,9 +125,68 @@ void Client::run()
    }   //while
}

//==============================================================================
//      Client::createAuthorisationRequest()
//==============================================================================
Client::RequestSP Client::createAuthorisationRequest()
{
    DEBUG_STREAM << "Client::createAuthorisationRequest()" << endl;

    RequestSP request_sp(new Request);

    request_sp->set_type(Request::AUTHORIZATION);

    Request::Authorization* authorization = request_sp->mutable_authorization();
    authorization->set_username(m_configuration_sp->getRemoteUsername());
    authorization->set_password(m_configuration_sp->getRemotePassword());

    return request_sp;
}

//==============================================================================
//      Client::processAuthorisationResponse()
//==============================================================================
void Client::processAuthorisationResponse(Client::ResponseSP response_sp)
{
    DEBUG_STREAM << "Client::processAuthorisationResponse()" << endl;

        const Response::Authorization& authorization = response_sp->authorization();

        INFO_STREAM << "STATUS " << authorization.status() << endl;

        //@todo: verify if connected or not
}

//==============================================================================
//      Client::createMetadataRequest()
//==============================================================================
Client::RequestSP Client::createMetadataRequest()
{
    DEBUG_STREAM << "Client::createMetadataRequest()" << endl;

    RequestSP request_sp(new Request);

    request_sp->set_type(Request::METADATA);

    Request::Metadata* metadata = request_sp->mutable_metadata();
    metadata->set_schema(m_configuration_sp->getDatabaseSchema());
    metadata->set_table(m_configuration_sp->getDatabaseTable());

    return request_sp;
}

//==============================================================================
//      Client::processMetadataResponse()
//==============================================================================
void Client::processMetadataResponse(Client::ResponseSP response_sp)
{
    DEBUG_STREAM << "Client::processMetadataResponse()" << endl;

    //@todo: what to do in case of error
}

//==============================================================================
//      Client::prepareResponse()
//      Client::encodeHeader()
//==============================================================================
void Client::encodeHeader(std::vector<boost::uint8_t>& buf, boost::uint32_t size)
    throw(std::runtime_error)
@@ -144,7 +203,7 @@ void Client::encodeHeader(std::vector<boost::uint8_t>& buf, boost::uint32_t size
}

//==============================================================================
//      Client::prepareResponse()
//      Client::decodeHeader()
//==============================================================================
boost::uint32_t Client::decodeHeader(std::vector<boost::uint8_t>& buf)
    throw(std::runtime_error)
+41 −5
Original line number Diff line number Diff line
@@ -44,12 +44,15 @@ protected:

public:
//------------------------------------------------------------------------------
//  [Public] Users methods
//  [Public] Users abstract methods
//------------------------------------------------------------------------------
    virtual void start() = 0;

    virtual void stop() = 0;

//------------------------------------------------------------------------------
//  [Public] Users methods
//------------------------------------------------------------------------------
    virtual Tango::DevState readState();

    virtual std::string readStatus();
@@ -60,12 +63,37 @@ protected:
//------------------------------------------------------------------------------
    virtual void run();

    virtual RequestSP createAuthorisationRequest();

    virtual void processAuthorisationResponse(ResponseSP);

    virtual RequestSP createMetadataRequest();

    virtual void processMetadataResponse(ResponseSP);

    virtual void encodeHeader(std::vector<boost::uint8_t>&, boost::uint32_t)
        throw(std::runtime_error);

    virtual boost::uint32_t decodeHeader(std::vector<boost::uint8_t>&)
        throw(std::runtime_error);

//------------------------------------------------------------------------------
//  [Protected] Utilities abstract methods
//------------------------------------------------------------------------------
    virtual void startWriteRequest() = 0;

    virtual void handleWriteRequest(const boost::system::error_code&) = 0;

    virtual void startReadResponseHeader() = 0;

    virtual void handleReadResponseHeader(const boost::system::error_code&) = 0;

    virtual void startReadResponseBody(boost::uint32_t) = 0;

    virtual void handleReadResponseBody(const boost::system::error_code&) = 0;

    virtual void resetConnection() = 0;

//------------------------------------------------------------------------------
//  [Protected] Class variables
//------------------------------------------------------------------------------
@@ -90,6 +118,18 @@ protected:
    //Thread for IO service run scoped pointer
    boost::scoped_ptr<boost::thread> m_thread_sp;

    //First connection timeout
    boost::asio::deadline_timer m_resetConnectionTimer;

    //Request response timeout
    boost::asio::deadline_timer m_requestResponseTimer;

    //Header size on binary stream
    const unsigned HEADER_SIZE = 4;

    //Buffer for binary data read from stream
    std::vector<boost::uint8_t> m_readBuff;

    //Tango state property mutex
    boost::mutex m_stateMutex;

@@ -101,10 +141,6 @@ protected:

    //Tango status property
    std::string m_status;

    const unsigned HEADER_SIZE = 4;

    std::vector<boost::uint8_t> m_readBuff;
};

}   //End of namespace
+14 −29
Original line number Diff line number Diff line
@@ -23,6 +23,11 @@ PlainClient::PlainClient(Tango::DeviceImpl* deviceImpl_p,
PlainClient::~PlainClient()
{
    DEBUG_STREAM << "PlainClient::~PlainClient()" << endl;

    boost::system::error_code errorCode;

    m_plainSocket.shutdown(boost::asio::ip::tcp::socket::shutdown_both, errorCode);
    m_plainSocket.close(errorCode);
}

//==============================================================================
@@ -59,7 +64,6 @@ void PlainClient::stop()
    boost::system::error_code errorCode;

    m_plainSocket.shutdown(boost::asio::ip::tcp::socket::shutdown_both, errorCode);

    m_plainSocket.close(errorCode);

    Client::stop();
@@ -72,6 +76,7 @@ void PlainClient::startResolve()
{
    DEBUG_STREAM << "PlainClient::startResolve()" << endl;

    //@warning: check lexical cast
    boost::asio::ip::tcp::resolver::query query(m_configuration_sp->getRemoteHost(),
        boost::lexical_cast<std::string>(m_configuration_sp->getRemotePort()));

@@ -137,16 +142,9 @@ void PlainClient::handleConnect(const boost::system::error_code& errorCode,
{
    DEBUG_STREAM << "PlainClient::handleConnect()" << endl;

//    if(!m_plainSocket.is_open())
//    {
//        ERROR_STREAM << "PlainClient::handleConnect() connection timeout!" << endl;
//
//        startConnect(++endPointIterator);
//    }
//    else
    if(!errorCode)
    {
        startRequest();
        startWriteRequest();
    }
    else
    {
@@ -162,25 +160,16 @@ void PlainClient::handleConnect(const boost::system::error_code& errorCode,
//==============================================================================
//      PlainClient::startRequest()
//==============================================================================
void PlainClient::startRequest()
void PlainClient::startWriteRequest()
{
    DEBUG_STREAM << "PlainClient::startRequest()" << endl;

    RequestSP request_sp(new Request);

    request_sp->set_type(Request::AUTHORIZATION);

    Request::Authorization* authorization = request_sp->mutable_authorization();
    authorization->set_username(m_configuration_sp->getRemoteUsername());
    authorization->set_password(m_configuration_sp->getRemotePassword());
    RequestSP request_sp = createAuthorisationRequest();

    boost::uint32_t bodySize = request_sp->ByteSize();

    DEBUG_STREAM << "PlainClient::startRequest() SIZE " << bodySize << endl;

    if(!request_sp->IsInitialized())
        ERROR_STREAM << "NOT INITIALISED" << endl;

    std::vector<boost::uint8_t> writeBuff;
    writeBuff.resize(HEADER_SIZE + bodySize);

@@ -191,14 +180,14 @@ void PlainClient::startRequest()
    m_resetConnectionTimer.expires_from_now(boost::posix_time::seconds(30));

    boost::asio::async_write(m_plainSocket, boost::asio::buffer(writeBuff),
        boost::bind(&PlainClient::handleRequest, this,
        boost::bind(&PlainClient::handleWriteRequest, this,
        boost::asio::placeholders::error));
}

//==============================================================================
//      PlainClient::handleRequest()
//==============================================================================
void PlainClient::handleRequest(const boost::system::error_code& errorCode)
void PlainClient::handleWriteRequest(const boost::system::error_code& errorCode)
{
    DEBUG_STREAM << "PlainClient::handleRequest()" << endl;

@@ -280,13 +269,10 @@ void PlainClient::handleReadResponseBody(const boost::system::error_code& errorC

        response_sp->ParseFromArray(&m_readBuff[HEADER_SIZE], m_readBuff.size() - HEADER_SIZE);

        const Response::Authorization& authorization = response_sp->authorization();

        INFO_STREAM << "STATUS " << authorization.status() << endl;
        processAuthorisationResponse(response_sp);

        m_requestResponseTimer.expires_from_now(boost::posix_time::seconds(10));

        m_requestResponseTimer.async_wait(boost::bind(&PlainClient::startRequest, this));
        m_requestResponseTimer.async_wait(boost::bind(&PlainClient::startWriteRequest, this));
    }
    else
    {
@@ -299,7 +285,7 @@ void PlainClient::handleReadResponseBody(const boost::system::error_code& errorC
//==============================================================================
void PlainClient::resetConnection()
{
        //DEBUG_STREAM << "PlainClient::resetConnection()" << endl;
        DEBUG_STREAM << "PlainClient::resetConnection()" << endl;

        if(m_resetConnectionTimer.expires_at() <=
                boost::asio::deadline_timer::traits_type::now())
@@ -309,7 +295,6 @@ void PlainClient::resetConnection()
            boost::system::error_code errorCode;

            m_plainSocket.shutdown(boost::asio::ip::tcp::socket::shutdown_both, errorCode);

            m_plainSocket.close(errorCode);

            m_resetConnectionTimer.expires_at(boost::posix_time::pos_infin);
+11 −17
Original line number Diff line number Diff line
@@ -38,41 +38,35 @@ protected:
//------------------------------------------------------------------------------
//  [Protected] Utilities methods
//------------------------------------------------------------------------------
    void startResolve();
    virtual void startResolve();

    void handleResolve(const boost::system::error_code&,
    virtual void handleResolve(const boost::system::error_code&,
        boost::asio::ip::tcp::resolver::iterator);

    void startConnect(boost::asio::ip::tcp::resolver::iterator);
    virtual void startConnect(boost::asio::ip::tcp::resolver::iterator);

    void handleConnect(const boost::system::error_code&,
    virtual void handleConnect(const boost::system::error_code&,
        boost::asio::ip::tcp::resolver::iterator);

    void startRequest();
    virtual void startWriteRequest();

    void handleRequest(const boost::system::error_code&);
    virtual void handleWriteRequest(const boost::system::error_code&);

    void startReadResponseHeader();
    virtual void startReadResponseHeader();

    void handleReadResponseHeader(const boost::system::error_code&);
    virtual void handleReadResponseHeader(const boost::system::error_code&);

    void startReadResponseBody(boost::uint32_t);
    virtual void startReadResponseBody(boost::uint32_t);

    void handleReadResponseBody(const boost::system::error_code&);
    virtual void handleReadResponseBody(const boost::system::error_code&);

    void resetConnection();
    virtual void resetConnection();

//------------------------------------------------------------------------------
//  [Protected] Class variables
//------------------------------------------------------------------------------
    //Plain connection socket
    boost::asio::ip::tcp::socket m_plainSocket;

    //First connection timeout
    boost::asio::deadline_timer m_resetConnectionTimer;

    //Request response timeout
    boost::asio::deadline_timer m_requestResponseTimer;
};

}   //End of namespace
+108 −0
Original line number Diff line number Diff line
@@ -41,6 +41,8 @@ void SSLClient::start()
    DEBUG_STREAM << "SSLClient::start()" << endl;

    Client::start();

    startResolve();
}

//==============================================================================
@@ -53,4 +55,110 @@ void SSLClient::stop()
    Client::stop();
}

//==============================================================================
//      SSLClient::startResolve()
//==============================================================================
void SSLClient::startResolve()
{
    DEBUG_STREAM << "SSLClient::startResolve()" << endl;
}

//==============================================================================
//      SSLClient::handleResolve()
//==============================================================================
void SSLClient::handleResolve(const boost::system::error_code&,
        boost::asio::ip::tcp::resolver::iterator)
{
    DEBUG_STREAM << "SSLClient::handleResolve()" << endl;
}

//==============================================================================
//      SSLClient::startConnect()
//==============================================================================
void SSLClient::startConnect(boost::asio::ip::tcp::resolver::iterator)
{
    DEBUG_STREAM << "SSLClient::startConnect()" << endl;
}

//==============================================================================
//      SSLClient::handleConnect()
//==============================================================================
void SSLClient::handleConnect(const boost::system::error_code&,
        boost::asio::ip::tcp::resolver::iterator)
{
    DEBUG_STREAM << "SSLClient::handleConnect()" << endl;
}

//==============================================================================
//      SSLClient::startHandShake()
//==============================================================================
void SSLClient::startHandShake()
{
    DEBUG_STREAM << "SSLClient::startHandShake()" << endl;
}

//==============================================================================
//      SSLClient::handleHandShake()
//==============================================================================
void SSLClient::handleHandShake(const boost::system::error_code&)
{
    DEBUG_STREAM << "SSLClient::handleHandShake()" << endl;
}

//==============================================================================
//      SSLClient::startWriteRequest()
//==============================================================================
void SSLClient::startWriteRequest()
{
    DEBUG_STREAM << "SSLClient::startWriteRequest()" << endl;
}

//==============================================================================
//      SSLClient::handleWriteRequest()
//==============================================================================
void SSLClient::handleWriteRequest(const boost::system::error_code&)
{
    DEBUG_STREAM << "SSLClient::handleWriteRequest()" << endl;
}

//==============================================================================
//      SSLClient::startReadResponseHeader()
//==============================================================================
void SSLClient::startReadResponseHeader()
{
    DEBUG_STREAM << "SSLClient::startReadResponseHeader()" << endl;
}

//==============================================================================
//      SSLClient::handleReadResponseHeader()
//==============================================================================
void SSLClient::handleReadResponseHeader(const boost::system::error_code&)
{
    DEBUG_STREAM << "SSLClient::handleReadResponseHeader()" << endl;
}

//==============================================================================
//      SSLClient::startReadResponseBody()
//==============================================================================
void SSLClient::startReadResponseBody(boost::uint32_t)
{
    DEBUG_STREAM << "SSLClient::startReadResponseBody()" << endl;
}

//==============================================================================
//      SSLClient::handleReadResponseBody()
//==============================================================================
void SSLClient::handleReadResponseBody(const boost::system::error_code&)
{
    DEBUG_STREAM << "SSLClient::handleReadResponseBody()" << endl;
}

//==============================================================================
//      SSLClient::resetConnection()
//==============================================================================
void SSLClient::resetConnection()
{
    DEBUG_STREAM << "SSLClient::resetConnection()" << endl;
}

}   //namespace
Loading