Loading src/DBManager.cpp 0 → 100644 +94 −0 Original line number Diff line number Diff line #include <DBManager.h> #include <soci/mysql/soci-mysql.h> namespace MetadataExporter_ns { //============================================================================== // DBManager::DBManager() //============================================================================== DBManager::DBManager(Tango::DeviceImpl* deviceImpl_p, Configuration::SP configuration_sp) : Tango::LogAdapter(deviceImpl_p), m_configuration_sp(configuration_sp) { DEBUG_STREAM << "DBManager::DBManager()" << endl; unsigned int connectionNumber = m_configuration_sp->getDatabaseConnectionNumber(); m_connectionPool_sp.reset(new soci::connection_pool(connectionNumber)); } //============================================================================== // DBManager::DBManager() //============================================================================== DBManager::~DBManager() { DEBUG_STREAM << "DBManager::DBManager()" << endl; } //============================================================================== // DBManager::DBManager() //============================================================================== DBManager::SP DBManager::create(Tango::DeviceImpl* deviceImpl_p, Configuration::SP configuration_sp) { DBManager::SP d_sp(new DBManager(deviceImpl_p, configuration_sp), DBManager::Deleter()); return d_sp; } //============================================================================== // DBManager::connect() //============================================================================== void DBManager::connect() throw(soci::soci_error) { DEBUG_STREAM << "DBManager::connect()" << endl; std::stringstream connection; connection << " host=" << m_configuration_sp->getDatabaseHost(); connection << " port=" << m_configuration_sp->getDatabasePort(); connection << " user=" << m_configuration_sp->getDatabaseUsername(); connection << " password=" << m_configuration_sp->getDatabasePassword(); unsigned int connectionNumber = m_configuration_sp->getDatabaseConnectionNumber(); for(unsigned int i=0; i<connectionNumber; ++i) { m_connectionPool_sp->at(i).open(connection.str()); #ifdef VERBOSE_DEBUG INFO_STREAM << "CONNECTION: " << connection.str() << " -> OPEN" << endl; INFO_STREAM << "-------------------------------------------------" << endl; #endif } } //============================================================================== // DBManager::disconnect() //============================================================================== void DBManager::disconnect() { DEBUG_STREAM << "DBManager::disconnect()" << endl; std::stringstream connection; connection << " host=" << m_configuration_sp->getDatabaseHost(); connection << " port=" << m_configuration_sp->getDatabasePort(); connection << " user=" << m_configuration_sp->getDatabaseUsername(); connection << " password=" << m_configuration_sp->getDatabasePassword(); unsigned int connectionNumber = m_configuration_sp->getDatabaseConnectionNumber(); for(unsigned int i=0; i<connectionNumber; ++i) { m_connectionPool_sp->at(i).close(); #ifdef VERBOSE_DEBUG INFO_STREAM << "CONNECTION: " << connection.str() << " -> CLOSE" << endl; INFO_STREAM << "-------------------------------------------------" << endl; #endif } } } //namespace src/DBManager.h 0 → 100644 +78 −0 Original line number Diff line number Diff line /* * File: DBManager.h * Author: mdm * * Created on October 24, 2013, 2:57 PM */ #ifndef DBMANAGER_H #define DBMANAGER_H #include <Configuration.h> #include <tango.h> #include <boost/scoped_ptr.hpp> #include <soci/error.h> #include <soci/session.h> #include <soci/connection-pool.h> namespace MetadataExporter_ns { class DBManager : public Tango::LogAdapter { public: //------------------------------------------------------------------------------ // [Public] Shared pointer typedef //------------------------------------------------------------------------------ typedef boost::shared_ptr<DBManager> SP; protected: //------------------------------------------------------------------------------ // [Protected] Constructor destructor deleter //------------------------------------------------------------------------------ DBManager(Tango::DeviceImpl*, Configuration::SP); virtual ~DBManager(); class Deleter; friend Deleter; class Deleter { public: void operator()(DBManager* d) { delete d; } }; public: //------------------------------------------------------------------------------ // [Public] Class creation method //------------------------------------------------------------------------------ static DBManager::SP create(Tango::DeviceImpl*, Configuration::SP); //------------------------------------------------------------------------------ // [Public] Connection management methods //------------------------------------------------------------------------------ virtual void connect() throw(soci::soci_error); virtual void disconnect(); //------------------------------------------------------------------------------ // [Public] Data access methods //------------------------------------------------------------------------------ protected: //------------------------------------------------------------------------------ // [Protected] Class variables //------------------------------------------------------------------------------ //Configuration shared pointer Configuration::SP m_configuration_sp; //Database connection pool scoped pointer boost::scoped_ptr<soci::connection_pool> m_connectionPool_sp; }; } //End of namespace #endif /* DBMANAGER_H */ src/PlainServer.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -43,7 +43,8 @@ void PlainServer::startAccept() { DEBUG_STREAM << "PlainServer::startAccept()" << endl; Session::SP session_sp = PlainSession::create(m_deviceImpl_p, m_ioService_sp); Session::SP session_sp = PlainSession::create(m_deviceImpl_p, m_configuration_sp, m_dBManager_sp, m_ioService_sp); m_acceptor_sp->async_accept(session_sp->getSocket(), boost::bind(&PlainServer::handleAccept, this, Loading src/PlainSession.cpp +6 −4 Original line number Diff line number Diff line Loading @@ -11,8 +11,10 @@ namespace MetadataExporter_ns // PlainSession::PlainSession() //============================================================================== PlainSession::PlainSession(Tango::DeviceImpl* deviceImpl_p, Configuration::SP configuration_sp, DBManager::SP dBManager_sp, boost::shared_ptr<boost::asio::io_service> ioService_sp) : Session::Session(deviceImpl_p, ioService_sp), m_plainSocket(*ioService_sp) Session::Session(deviceImpl_p,configuration_sp, dBManager_sp, ioService_sp), m_plainSocket(*ioService_sp) { DEBUG_STREAM << "PlainSession::PlainSession()" << endl; } Loading @@ -35,10 +37,11 @@ PlainSession::~PlainSession() // PlainSession::create() //============================================================================== Session::SP PlainSession::create(Tango::DeviceImpl* deviceImpl_p, Configuration::SP configuration_sp, DBManager::SP dBManager_sp, boost::shared_ptr<boost::asio::io_service> ioService_sp) { Session::SP s_sp(new PlainSession(deviceImpl_p, ioService_sp), PlainSession::Deleter()); Session::SP s_sp(new PlainSession(deviceImpl_p, configuration_sp, dBManager_sp, ioService_sp), PlainSession::Deleter()); return s_sp; } Loading Loading @@ -114,7 +117,6 @@ void PlainSession::startWriteResponse() ResponseSP response_sp = prepareResponse(request_sp); //@warning: byteSize return int not unsigned boost::uint32_t bodySize = response_sp->ByteSize(); DEBUG_STREAM << "PlainSession::startWriteResponse() SIZE: " << bodySize << endl; Loading src/PlainSession.h +7 −4 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ protected: //------------------------------------------------------------------------------ // [Protected] Constructor destructor deleter //------------------------------------------------------------------------------ PlainSession(Tango::DeviceImpl*, PlainSession(Tango::DeviceImpl*, Configuration::SP, DBManager::SP, boost::shared_ptr<boost::asio::io_service>); virtual ~PlainSession(); Loading @@ -32,11 +32,14 @@ protected: public: //------------------------------------------------------------------------------ // [Public] Users methods // [Public] Class creation method //------------------------------------------------------------------------------ static Session::SP create(Tango::DeviceImpl*, boost::shared_ptr<boost::asio::io_service>); static Session::SP create(Tango::DeviceImpl*, Configuration::SP, DBManager::SP, boost::shared_ptr<boost::asio::io_service>); //------------------------------------------------------------------------------ // [Public] Incoming connection methods //------------------------------------------------------------------------------ virtual boost::asio::ip::tcp::socket& getSocket(); virtual void start(); Loading Loading
src/DBManager.cpp 0 → 100644 +94 −0 Original line number Diff line number Diff line #include <DBManager.h> #include <soci/mysql/soci-mysql.h> namespace MetadataExporter_ns { //============================================================================== // DBManager::DBManager() //============================================================================== DBManager::DBManager(Tango::DeviceImpl* deviceImpl_p, Configuration::SP configuration_sp) : Tango::LogAdapter(deviceImpl_p), m_configuration_sp(configuration_sp) { DEBUG_STREAM << "DBManager::DBManager()" << endl; unsigned int connectionNumber = m_configuration_sp->getDatabaseConnectionNumber(); m_connectionPool_sp.reset(new soci::connection_pool(connectionNumber)); } //============================================================================== // DBManager::DBManager() //============================================================================== DBManager::~DBManager() { DEBUG_STREAM << "DBManager::DBManager()" << endl; } //============================================================================== // DBManager::DBManager() //============================================================================== DBManager::SP DBManager::create(Tango::DeviceImpl* deviceImpl_p, Configuration::SP configuration_sp) { DBManager::SP d_sp(new DBManager(deviceImpl_p, configuration_sp), DBManager::Deleter()); return d_sp; } //============================================================================== // DBManager::connect() //============================================================================== void DBManager::connect() throw(soci::soci_error) { DEBUG_STREAM << "DBManager::connect()" << endl; std::stringstream connection; connection << " host=" << m_configuration_sp->getDatabaseHost(); connection << " port=" << m_configuration_sp->getDatabasePort(); connection << " user=" << m_configuration_sp->getDatabaseUsername(); connection << " password=" << m_configuration_sp->getDatabasePassword(); unsigned int connectionNumber = m_configuration_sp->getDatabaseConnectionNumber(); for(unsigned int i=0; i<connectionNumber; ++i) { m_connectionPool_sp->at(i).open(connection.str()); #ifdef VERBOSE_DEBUG INFO_STREAM << "CONNECTION: " << connection.str() << " -> OPEN" << endl; INFO_STREAM << "-------------------------------------------------" << endl; #endif } } //============================================================================== // DBManager::disconnect() //============================================================================== void DBManager::disconnect() { DEBUG_STREAM << "DBManager::disconnect()" << endl; std::stringstream connection; connection << " host=" << m_configuration_sp->getDatabaseHost(); connection << " port=" << m_configuration_sp->getDatabasePort(); connection << " user=" << m_configuration_sp->getDatabaseUsername(); connection << " password=" << m_configuration_sp->getDatabasePassword(); unsigned int connectionNumber = m_configuration_sp->getDatabaseConnectionNumber(); for(unsigned int i=0; i<connectionNumber; ++i) { m_connectionPool_sp->at(i).close(); #ifdef VERBOSE_DEBUG INFO_STREAM << "CONNECTION: " << connection.str() << " -> CLOSE" << endl; INFO_STREAM << "-------------------------------------------------" << endl; #endif } } } //namespace
src/DBManager.h 0 → 100644 +78 −0 Original line number Diff line number Diff line /* * File: DBManager.h * Author: mdm * * Created on October 24, 2013, 2:57 PM */ #ifndef DBMANAGER_H #define DBMANAGER_H #include <Configuration.h> #include <tango.h> #include <boost/scoped_ptr.hpp> #include <soci/error.h> #include <soci/session.h> #include <soci/connection-pool.h> namespace MetadataExporter_ns { class DBManager : public Tango::LogAdapter { public: //------------------------------------------------------------------------------ // [Public] Shared pointer typedef //------------------------------------------------------------------------------ typedef boost::shared_ptr<DBManager> SP; protected: //------------------------------------------------------------------------------ // [Protected] Constructor destructor deleter //------------------------------------------------------------------------------ DBManager(Tango::DeviceImpl*, Configuration::SP); virtual ~DBManager(); class Deleter; friend Deleter; class Deleter { public: void operator()(DBManager* d) { delete d; } }; public: //------------------------------------------------------------------------------ // [Public] Class creation method //------------------------------------------------------------------------------ static DBManager::SP create(Tango::DeviceImpl*, Configuration::SP); //------------------------------------------------------------------------------ // [Public] Connection management methods //------------------------------------------------------------------------------ virtual void connect() throw(soci::soci_error); virtual void disconnect(); //------------------------------------------------------------------------------ // [Public] Data access methods //------------------------------------------------------------------------------ protected: //------------------------------------------------------------------------------ // [Protected] Class variables //------------------------------------------------------------------------------ //Configuration shared pointer Configuration::SP m_configuration_sp; //Database connection pool scoped pointer boost::scoped_ptr<soci::connection_pool> m_connectionPool_sp; }; } //End of namespace #endif /* DBMANAGER_H */
src/PlainServer.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -43,7 +43,8 @@ void PlainServer::startAccept() { DEBUG_STREAM << "PlainServer::startAccept()" << endl; Session::SP session_sp = PlainSession::create(m_deviceImpl_p, m_ioService_sp); Session::SP session_sp = PlainSession::create(m_deviceImpl_p, m_configuration_sp, m_dBManager_sp, m_ioService_sp); m_acceptor_sp->async_accept(session_sp->getSocket(), boost::bind(&PlainServer::handleAccept, this, Loading
src/PlainSession.cpp +6 −4 Original line number Diff line number Diff line Loading @@ -11,8 +11,10 @@ namespace MetadataExporter_ns // PlainSession::PlainSession() //============================================================================== PlainSession::PlainSession(Tango::DeviceImpl* deviceImpl_p, Configuration::SP configuration_sp, DBManager::SP dBManager_sp, boost::shared_ptr<boost::asio::io_service> ioService_sp) : Session::Session(deviceImpl_p, ioService_sp), m_plainSocket(*ioService_sp) Session::Session(deviceImpl_p,configuration_sp, dBManager_sp, ioService_sp), m_plainSocket(*ioService_sp) { DEBUG_STREAM << "PlainSession::PlainSession()" << endl; } Loading @@ -35,10 +37,11 @@ PlainSession::~PlainSession() // PlainSession::create() //============================================================================== Session::SP PlainSession::create(Tango::DeviceImpl* deviceImpl_p, Configuration::SP configuration_sp, DBManager::SP dBManager_sp, boost::shared_ptr<boost::asio::io_service> ioService_sp) { Session::SP s_sp(new PlainSession(deviceImpl_p, ioService_sp), PlainSession::Deleter()); Session::SP s_sp(new PlainSession(deviceImpl_p, configuration_sp, dBManager_sp, ioService_sp), PlainSession::Deleter()); return s_sp; } Loading Loading @@ -114,7 +117,6 @@ void PlainSession::startWriteResponse() ResponseSP response_sp = prepareResponse(request_sp); //@warning: byteSize return int not unsigned boost::uint32_t bodySize = response_sp->ByteSize(); DEBUG_STREAM << "PlainSession::startWriteResponse() SIZE: " << bodySize << endl; Loading
src/PlainSession.h +7 −4 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ protected: //------------------------------------------------------------------------------ // [Protected] Constructor destructor deleter //------------------------------------------------------------------------------ PlainSession(Tango::DeviceImpl*, PlainSession(Tango::DeviceImpl*, Configuration::SP, DBManager::SP, boost::shared_ptr<boost::asio::io_service>); virtual ~PlainSession(); Loading @@ -32,11 +32,14 @@ protected: public: //------------------------------------------------------------------------------ // [Public] Users methods // [Public] Class creation method //------------------------------------------------------------------------------ static Session::SP create(Tango::DeviceImpl*, boost::shared_ptr<boost::asio::io_service>); static Session::SP create(Tango::DeviceImpl*, Configuration::SP, DBManager::SP, boost::shared_ptr<boost::asio::io_service>); //------------------------------------------------------------------------------ // [Public] Incoming connection methods //------------------------------------------------------------------------------ virtual boost::asio::ip::tcp::socket& getSocket(); virtual void start(); Loading