diff options
Diffstat (limited to 'Swiften/Whiteboard/WhiteboardClient.cpp')
-rw-r--r-- | Swiften/Whiteboard/WhiteboardClient.cpp | 79 |
1 files changed, 19 insertions, 60 deletions
diff --git a/Swiften/Whiteboard/WhiteboardClient.cpp b/Swiften/Whiteboard/WhiteboardClient.cpp index ce47fe5..4dacc90 100644 --- a/Swiften/Whiteboard/WhiteboardClient.cpp +++ b/Swiften/Whiteboard/WhiteboardClient.cpp @@ -11,7 +11,7 @@ namespace Swift { WhiteboardOperation::ref WhiteboardClient::handleLocalOperationReceived(WhiteboardOperation::ref operation) { localOperations_.push_back(operation); -// if (bridge_.size() > 0) { + WhiteboardOperation::ref op; WhiteboardInsertOperation::ref insertOp = boost::dynamic_pointer_cast<WhiteboardInsertOperation>(operation); if (insertOp) { @@ -30,7 +30,7 @@ namespace Swift { op->setParentID(bridge_.back()->getID()); } bridge_.push_back(op); -// } + if (lastSentOperationID_.empty()) { WhiteboardInsertOperation::ref insertOp = boost::dynamic_pointer_cast<WhiteboardInsertOperation>(operation); @@ -59,8 +59,6 @@ namespace Swift { WhiteboardClient::Result WhiteboardClient::handleServerOperationReceived(WhiteboardOperation::ref operation) { serverOperations_.push_back(operation); -// WhiteboardOperation::ref clientOp; -// WhiteboardOperation::ref serverOp; Result result; // if (localOperations_.empty()) {// || localOperations_.back()->getID() == operation->getParentID()) { //Situation where client and server are in sync @@ -73,15 +71,6 @@ namespace Swift { if (bridge_.size() > 0 && lastSentOperationID_ == bridge_.front()->getID()) { bridge_.erase(bridge_.begin()); } - /*std::list<WhiteboardOperation::ref>::iterator it; - for (it = bridge_.begin(); it != bridge_.end(); ++it) { - if ((*it)->getParentID() == lastSentOperationID_) { - lastSentOperationID_ = (*it)->getID(); - serverOp = *it; - serverOp->setOrigin(WhiteboardOperation::Other); - break; - } - }*/ if (bridge_.size() > 0 && (bridge_.front())->getParentID() == lastSentOperationID_) { lastSentOperationID_ = (bridge_.front())->getID(); @@ -91,56 +80,26 @@ namespace Swift { lastSentOperationID_.clear(); } } else { - if (bridge_.size() > 0 && bridge_.front()->getParentID() == operation->getParentID()) { - std::list<WhiteboardOperation::ref>::iterator it = bridge_.begin(); - std::pair<WhiteboardOperation::ref, WhiteboardOperation::ref> opPair; - WhiteboardOperation::ref temp; - opPair = WhiteboardTransformer::transform(*it, operation); - temp = opPair.first; + std::list<WhiteboardOperation::ref>::iterator it = bridge_.begin(); + 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(*it, temp); + temp = opPair.first; *it = opPair.second; - std::string previousID = (*it)->getID(); - ++it; - for (; it != bridge_.end(); ++it) { - opPair = WhiteboardTransformer::transform(*it, temp); - temp = opPair.first; - *it = opPair.second; - (*it)->setParentID(previousID); - previousID = (*it)->getID(); - } - - temp->setParentID(localOperations_.back()->getID()); - localOperations_.push_back(temp); - result.client = temp; - } else { -//doesn't get executed -/* 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; - for (it = localOperations_.rbegin(); it != localOperations_.rend(); ++it) { - while ((*it)->getParentID() == temp->getParentID()) { - opPair = WhiteboardTransformer::transform(boost::dynamic_pointer_cast<WhiteboardInsertOperation>(*it), temp); - if (bridge_.size() > 0) { - opPair.second->setParentID(bridge_.back()->getID()); - } - temp = opPair.first; - bridge_.push_back(opPair.second); - if (it == localOperations_.rbegin()) { - localOperations_.push_back(temp); - result.client = temp; - end = true; - break; - } else { - --it; - } - } - if (end) { - break; - }*/ - - + (*it)->setParentID(previousID); + previousID = (*it)->getID(); } + + temp->setParentID(localOperations_.back()->getID()); + localOperations_.push_back(temp); + result.client = temp; } return result; |