summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/Whiteboard/WhiteboardClient.cpp')
-rw-r--r--Swiften/Whiteboard/WhiteboardClient.cpp37
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;
- }
- }
+ }*/
+
+
}
}