diff options
Diffstat (limited to 'Swift/Controllers/WhiteboardManager.cpp')
-rw-r--r-- | Swift/Controllers/WhiteboardManager.cpp | 48 |
1 files changed, 29 insertions, 19 deletions
diff --git a/Swift/Controllers/WhiteboardManager.cpp b/Swift/Controllers/WhiteboardManager.cpp index 37c3263..f6db4ff 100644 --- a/Swift/Controllers/WhiteboardManager.cpp +++ b/Swift/Controllers/WhiteboardManager.cpp @@ -20,7 +20,6 @@ namespace Swift { WhiteboardManager::WhiteboardManager(WhiteboardWindowFactory* whiteboardWindowFactory, UIEventStream* uiEventStream, WhiteboardSessionManager* whiteboardSessionManager) : whiteboardWindowFactory_(whiteboardWindowFactory), uiEventStream_(uiEventStream), whiteboardSessionManager_(whiteboardSessionManager) { uiEventConnection_ = uiEventStream_->onUIEvent.connect(boost::bind(&WhiteboardManager::handleUIEvent, this, _1)); - whiteboardSessionManager_->onRequestAccepted.connect(boost::bind(&WhiteboardManager::handleAcceptedRequest, this, _1, _2)); } WhiteboardManager::~WhiteboardManager() { @@ -29,23 +28,30 @@ namespace Swift { } } - WhiteboardWindow* WhiteboardManager::createNewWhiteboardWindow(const JID& contact, WhiteboardSession* session) { + WhiteboardWindow* WhiteboardManager::createNewWhiteboardWindow(const JID& contact, WhiteboardSession::ref session) { WhiteboardWindow *window = whiteboardWindowFactory_->createWhiteboardWindow(session); - whiteboardWindows_[contact] = window; + whiteboardWindows_[contact.toBare()] = window; return window; } WhiteboardWindow* WhiteboardManager::findWhiteboardWindow(const JID& contact) { - if (whiteboardWindows_.find(contact) == whiteboardWindows_.end()) { + if (whiteboardWindows_.find(contact.toBare()) == whiteboardWindows_.end()) { return NULL; } - return whiteboardWindows_[contact]; + return whiteboardWindows_[contact.toBare()]; } void WhiteboardManager::handleUIEvent(boost::shared_ptr<UIEvent> event) { - boost::shared_ptr<RequestWhiteboardUIEvent> whiteboardEvent = boost::dynamic_pointer_cast<RequestWhiteboardUIEvent>(event); - if (whiteboardEvent) { - whiteboardSessionManager_->requestSession(whiteboardEvent->getContact()); + boost::shared_ptr<RequestWhiteboardUIEvent> requestWhiteboardEvent = boost::dynamic_pointer_cast<RequestWhiteboardUIEvent>(event); + if (requestWhiteboardEvent) { + JID contact = requestWhiteboardEvent->getContact(); + WhiteboardSession::ref session = whiteboardSessionManager_->requestSession(contact); + WhiteboardWindow* window = findWhiteboardWindow(contact); + if (window == NULL) { + createNewWhiteboardWindow(contact, session); + } else { + window->setSession(session); + } } boost::shared_ptr<AcceptWhiteboardSessionUIEvent> sessionAcceptEvent = boost::dynamic_pointer_cast<AcceptWhiteboardSessionUIEvent>(event); if (sessionAcceptEvent) { @@ -53,24 +59,28 @@ namespace Swift { } boost::shared_ptr<CancelWhiteboardSessionUIEvent> sessionCancelEvent = boost::dynamic_pointer_cast<CancelWhiteboardSessionUIEvent>(event); if (sessionCancelEvent) { - whiteboardSessionManager_->cancelSession(sessionCancelEvent->getContact()); + cancelSession(sessionCancelEvent->getContact()); } } void WhiteboardManager::acceptSession(const JID& from) { - WhiteboardSession* session = whiteboardSessionManager_->acceptSession(from); - WhiteboardWindow* window = findWhiteboardWindow(from); - if (window == NULL) { - window = createNewWhiteboardWindow(from, session); + IncomingWhiteboardSession::ref session = boost::dynamic_pointer_cast<IncomingWhiteboardSession>(whiteboardSessionManager_->getSession(from)); + if (session) { + session->accept(); + WhiteboardWindow* window = findWhiteboardWindow(from); + if (window == NULL) { + window = createNewWhiteboardWindow(from, session); + } else { + window->setSession(session); + } + window->show(); } - window->show(); } - void WhiteboardManager::handleAcceptedRequest(const JID& from, WhiteboardSession* session) { - WhiteboardWindow* window = findWhiteboardWindow(from); - if (window == NULL) { - window = createNewWhiteboardWindow(from, session); + void WhiteboardManager::cancelSession(const JID& from) { + IncomingWhiteboardSession::ref session = boost::dynamic_pointer_cast<IncomingWhiteboardSession>(whiteboardSessionManager_->getSession(from)); + if (session) { + session->cancel(); } - window->show(); } } |