diff options
Diffstat (limited to 'Swiften/Whiteboard/WhiteboardClient.cpp')
-rw-r--r-- | Swiften/Whiteboard/WhiteboardClient.cpp | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/Swiften/Whiteboard/WhiteboardClient.cpp b/Swiften/Whiteboard/WhiteboardClient.cpp index 9610247..2dd9e45 100644 --- a/Swiften/Whiteboard/WhiteboardClient.cpp +++ b/Swiften/Whiteboard/WhiteboardClient.cpp @@ -12,7 +12,16 @@ namespace Swift { WhiteboardOperation::ref WhiteboardClient::handleLocalOperationReceived(WhiteboardOperation::ref operation) { localOperations_.push_back(operation); // if (bridge_.size() > 0) { - WhiteboardOperation::ref op = boost::make_shared<WhiteboardInsertOperation>(*boost::dynamic_pointer_cast<WhiteboardInsertOperation>(operation).get()); + WhiteboardOperation::ref op; + WhiteboardInsertOperation::ref insertOp = boost::dynamic_pointer_cast<WhiteboardInsertOperation>(operation); + if (insertOp) { + op = boost::make_shared<WhiteboardInsertOperation>(*insertOp.get()); + } + WhiteboardUpdateOperation::ref updateOp = boost::dynamic_pointer_cast<WhiteboardUpdateOperation>(operation); + if (updateOp) { + op = boost::make_shared<WhiteboardUpdateOperation>(*updateOp.get()); + } + if (bridge_.size() > 0) { op->setParentID(bridge_.back()->getID()); } @@ -20,7 +29,15 @@ namespace Swift { // } if (lastSentOperationID_.empty()) { - WhiteboardOperation::ref op = boost::make_shared<WhiteboardInsertOperation>(*boost::dynamic_pointer_cast<WhiteboardInsertOperation>(operation).get()); + WhiteboardInsertOperation::ref insertOp = boost::dynamic_pointer_cast<WhiteboardInsertOperation>(operation); + if (insertOp) { + op = boost::make_shared<WhiteboardInsertOperation>(*insertOp.get()); + } + WhiteboardUpdateOperation::ref updateOp = boost::dynamic_pointer_cast<WhiteboardUpdateOperation>(operation); + if (updateOp) { + op = boost::make_shared<WhiteboardUpdateOperation>(*updateOp.get()); + } + if (serverOperations_.size() > 0) { op->setParentID(serverOperations_.back()->getID()); } @@ -62,23 +79,22 @@ namespace Swift { result.server = bridge_.front(); result.server->setOrigin(WhiteboardOperation::Other); } - if (!result.server) { lastSentOperationID_.clear(); } } else { if (bridge_.size() > 0 && bridge_.front()->getParentID() == operation->getParentID()) { std::list<WhiteboardOperation::ref>::iterator it = bridge_.begin(); - std::pair<WhiteboardInsertOperation::ref, WhiteboardInsertOperation::ref> opPair; - WhiteboardInsertOperation::ref temp; - opPair = WhiteboardTransformer::transform(boost::dynamic_pointer_cast<WhiteboardInsertOperation>(*it), boost::dynamic_pointer_cast<WhiteboardInsertOperation>(operation)); + std::pair<WhiteboardOperation::ref, WhiteboardOperation::ref> opPair; + WhiteboardOperation::ref temp; + opPair = WhiteboardTransformer::transform(*it, operation); temp = opPair.first; *it = opPair.second; std::string previousID = (*it)->getID(); ++it; for (; it != bridge_.end(); ++it) { - opPair = WhiteboardTransformer::transform(boost::dynamic_pointer_cast<WhiteboardInsertOperation>(*it), temp); + opPair = WhiteboardTransformer::transform(*it, temp); temp = opPair.first; *it = opPair.second; (*it)->setParentID(previousID); @@ -90,7 +106,7 @@ namespace Swift { result.client = temp; } else { //doesn't get executed - std::list<WhiteboardOperation::ref>::reverse_iterator it; +/* std::list<WhiteboardOperation::ref>::reverse_iterator it; std::pair<WhiteboardInsertOperation::ref, WhiteboardInsertOperation::ref> opPair; WhiteboardInsertOperation::ref temp = boost::dynamic_pointer_cast<WhiteboardInsertOperation>(operation); bool end = false; @@ -113,8 +129,9 @@ namespace Swift { } if (end) { break; - } - } + }*/ + + } } |