summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swift/Controllers/WhiteboardManager.cpp')
-rw-r--r--Swift/Controllers/WhiteboardManager.cpp48
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();
}
}