diff options
Diffstat (limited to 'Swiften/Whiteboard/WhiteboardClient.cpp')
-rw-r--r-- | Swiften/Whiteboard/WhiteboardClient.cpp | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/Swiften/Whiteboard/WhiteboardClient.cpp b/Swiften/Whiteboard/WhiteboardClient.cpp index 02ee48d..447e5de 100644 --- a/Swiften/Whiteboard/WhiteboardClient.cpp +++ b/Swiften/Whiteboard/WhiteboardClient.cpp @@ -11,39 +11,58 @@ 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()); if (bridge_.size() > 0) { - WhiteboardOperation::ref op = boost::make_shared<WhiteboardInsertOperation>(*boost::dynamic_pointer_cast<WhiteboardInsertOperation>(operation).get()); op->setParentID(bridge_.back()->getID()); - bridge_.push_back(op); } + bridge_.push_back(op); +// } if (lastSentOperationID_.empty()) { + WhiteboardOperation::ref op = boost::make_shared<WhiteboardInsertOperation>(*boost::dynamic_pointer_cast<WhiteboardInsertOperation>(operation).get()); + if (serverOperations_.size() > 0) { + op->setParentID(serverOperations_.back()->getID()); + } lastSentOperationID_ = operation->getID(); - return operation; + return op; + } else { + return WhiteboardOperation::ref(); } - return WhiteboardOperation::ref(); } std::pair<WhiteboardOperation::ref, WhiteboardOperation::ref> WhiteboardClient::handleServerOperationReceived(WhiteboardOperation::ref operation) { serverOperations_.push_back(operation); WhiteboardOperation::ref clientOp; WhiteboardOperation::ref serverOp; - if (localOperations_.empty()) {// || localOperations_.back()->getID() == operation->getParentID()) { +// if (localOperations_.empty()) {// || localOperations_.back()->getID() == operation->getParentID()) { + //Situation where client and server are in sync + if (localOperations_.size() == serverOperations_.size()-1) { localOperations_.push_back(operation); clientOp = operation; } else if (lastSentOperationID_ == operation->getID()) { - if (lastSentOperationID_ == bridge_.front()->getID()) { + //Client received confirmation about own operation and it sends next operation to server + if (bridge_.size() > 0 && lastSentOperationID_ == bridge_.front()->getID()) { bridge_.erase(bridge_.begin()); } - std::list<WhiteboardOperation::ref>::iterator it; + /*std::list<WhiteboardOperation::ref>::iterator it; for (it = bridge_.begin(); it != bridge_.end(); ++it) { if ((*it)->getParentID() == lastSentOperationID_) { lastSentOperationID_ = (*it)->getID(); - //serverOperations_.push_back(*it); serverOp = *it; serverOp->setOrigin(WhiteboardOperation::Other); break; } + }*/ + + if (bridge_.size() > 0 && (bridge_.front())->getParentID() == lastSentOperationID_) { + lastSentOperationID_ = (bridge_.front())->getID(); + serverOp = bridge_.front(); + serverOp->setOrigin(WhiteboardOperation::Other); + } + + if (!serverOp) { + lastSentOperationID_.clear(); } } else { if (bridge_.size() > 0 && bridge_.front()->getParentID() == operation->getParentID()) { @@ -68,6 +87,7 @@ namespace Swift { localOperations_.push_back(temp); clientOp = 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); |