diff --git a/src/gui/official/ObjectPool.hpp b/src/gui/official/ObjectPool.hpp index 7e4dc4b155d7ccda37020385e431d7afcd13c4c1..4e41c390e25480ee9e15f11e1526592c63756112 100644 --- a/src/gui/official/ObjectPool.hpp +++ b/src/gui/official/ObjectPool.hpp @@ -23,8 +23,8 @@ #include <list> #include <string> -#include <qmutex.h> -#include <qwaitcondition.h> +#include <QMutex> +#include <QWaitCondition> template< typename T > class ObjectPool diff --git a/src/gui/official/PhoneLineManagerImpl.cpp b/src/gui/official/PhoneLineManagerImpl.cpp index 0c24e18e167f5335955df85391207418ab3e90e4..c4a539860475dd1beb075af3ac57d0c873318dfc 100644 --- a/src/gui/official/PhoneLineManagerImpl.cpp +++ b/src/gui/official/PhoneLineManagerImpl.cpp @@ -11,23 +11,57 @@ #include "PhoneLineManager.hpp" PhoneLineManagerImpl::PhoneLineManagerImpl() - : mAccount(mSession.getDefaultAccount()) + : mSession(NULL) + , mAccount(NULL) , mCurrentLine(NULL) + , mIsInitialized(false) { EventFactory::instance().registerEvent< HangupEvent >("002"); EventFactory::instance().registerEvent< IncommingEvent >("001"); } +PhoneLineManagerImpl::~PhoneLineManagerImpl() +{ + delete mSession; + delete mAccount; + for(std::vector< PhoneLine * >::iterator pos = mPhoneLines.begin(); + pos != mPhoneLines.end(); + pos++) { + delete *pos; + } +} + +void +PhoneLineManagerImpl::initialize() +{ + QMutexLocker guard(&mIsInitializedMutex); + mIsInitialized = true; + mSession = new Session(); + mAccount = new Account(mSession->getDefaultAccount()); +} + +void PhoneLineManagerImpl::isInitialized() +{ + QMutexLocker guard(&mIsInitializedMutex); + if(!mIsInitialized) { + throw std::logic_error("Trying to use PhoneLineManager without prior initialize."); + } +} + void PhoneLineManagerImpl::start() { - mSession.getEvents(); + isInitialized(); + + mSession->getEvents(); } PhoneLine * PhoneLineManagerImpl::getCurrentLine() { + isInitialized(); + QMutexLocker guard(&mCurrentLineMutex); return mCurrentLine; } @@ -35,15 +69,19 @@ PhoneLineManagerImpl::getCurrentLine() void PhoneLineManagerImpl::setNbLines(unsigned int nb) { + isInitialized(); + mPhoneLines.clear(); for(unsigned int i = 0; i < nb; i++) { - mPhoneLines.push_back(new PhoneLine(mSession, i + 1)); + mPhoneLines.push_back(new PhoneLine(*mSession, i + 1)); } } PhoneLine * PhoneLineManagerImpl::getNextAvailableLine() { + isInitialized(); + PhoneLine *selectedLine = NULL; QMutexLocker guard(&mPhoneLinesMutex); @@ -71,6 +109,8 @@ PhoneLineManagerImpl::getNextAvailableLine() PhoneLine * PhoneLineManagerImpl::selectNextAvailableLine() { + isInitialized(); + PhoneLine *selectedLine = getNextAvailableLine(); PhoneLineLocker guard(selectedLine, false); @@ -97,6 +137,8 @@ PhoneLineManagerImpl::selectNextAvailableLine() PhoneLine * PhoneLineManagerImpl::getPhoneLine(unsigned int line) { + isInitialized(); + QMutexLocker guard(&mPhoneLinesMutex); if(mPhoneLines.size() <= line) { throw std::runtime_error("Trying to get an invalid Line"); @@ -108,6 +150,8 @@ PhoneLineManagerImpl::getPhoneLine(unsigned int line) PhoneLine * PhoneLineManagerImpl::getPhoneLine(const std::string &callId) { + isInitialized(); + PhoneLine *selectedLine = NULL; QMutexLocker guard(&mPhoneLinesMutex); @@ -129,6 +173,8 @@ PhoneLineManagerImpl::getPhoneLine(const std::string &callId) void PhoneLineManagerImpl::sendKey(Qt::Key c) { + isInitialized(); + PhoneLine *selectedLine = getCurrentLine(); if(!selectedLine) { @@ -149,6 +195,8 @@ PhoneLineManagerImpl::sendKey(Qt::Key c) void PhoneLineManagerImpl::selectLine(unsigned int line) { + isInitialized(); + PhoneLine *selectedLine = NULL; // getting the wanted line; { @@ -174,7 +222,7 @@ PhoneLineManagerImpl::selectLine(unsigned int line) PhoneLineLocker guard(selectedLine); selectedLine->select(); if(selectedLine->isAvailable()) { - mSession.playTone(); + mSession->playTone(); } } } @@ -273,7 +321,7 @@ PhoneLineManagerImpl::incomming(const std::string &, PhoneLine *selectedLine = getNextAvailableLine(); PhoneLineLocker guard(selectedLine, false); - Call call(mSession, callId, true); + Call call(*mSession, callId, true); if(selectedLine) { selectedLine->incomming(call); } diff --git a/src/gui/official/PhoneLineManagerImpl.hpp b/src/gui/official/PhoneLineManagerImpl.hpp index 2243369049b29a258d58c4c83de68342f493c480..b3c21502a8986a310c2e53421c7d7ccf4565f5e4 100644 --- a/src/gui/official/PhoneLineManagerImpl.hpp +++ b/src/gui/official/PhoneLineManagerImpl.hpp @@ -22,7 +22,7 @@ class PhoneLineManagerImpl : public QObject public: PhoneLineManagerImpl(); - + ~PhoneLineManagerImpl(); /** * Will return the PhoneLine linked to the line @@ -46,6 +46,7 @@ signals: void selected(unsigned int); public slots: + void initialize(); void start(); void sendKey(Qt::Key c); @@ -123,14 +124,20 @@ public slots: PhoneLine *selectNextAvailableLine(); private: - Session mSession; - Account mAccount; + void isInitialized(); + +private: + Session *mSession; + Account *mAccount; std::vector< PhoneLine * > mPhoneLines; QMutex mPhoneLinesMutex; PhoneLine *mCurrentLine; QMutex mCurrentLineMutex; + + bool mIsInitialized; + QMutex mIsInitializedMutex; }; diff --git a/src/gui/official/SFLPhoneApp.cpp b/src/gui/official/SFLPhoneApp.cpp index 9f7474427fb98949f0d7dfc30ed8ced56f93ef58..ca32a05c791c56376649fa71796259853c339cef 100644 --- a/src/gui/official/SFLPhoneApp.cpp +++ b/src/gui/official/SFLPhoneApp.cpp @@ -15,6 +15,7 @@ SFLPhoneApp::SFLPhoneApp(int argc, char **argv) : QApplication(argc, argv) { SessionIOFactory::instance().setCreator(new TCPSessionIOCreator(QString("localhost"), 3999)); + PhoneLineManager::instance().initialize(); PhoneLineManager::instance().setNbLines(NB_PHONELINES); Requester::instance().registerObject< Request >(std::string("playtone")); Requester::instance().registerObject< Request >(std::string("playdtmf")); diff --git a/src/gui/official/sflphone.pro b/src/gui/official/sflphone.pro index 76f8726e88e550257544a971acea5638b77ebe9b..64a5b00ce3ee63b4311774be3802574f677ce600 100644 --- a/src/gui/official/sflphone.pro +++ b/src/gui/official/sflphone.pro @@ -7,7 +7,7 @@ TARGET += DEPENDPATH += . INCLUDEPATH += . QT += network -CONFIG += debug +#CONFIG += debug # Input HEADERS += Account.hpp \