summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/Whiteboard')
-rw-r--r--Swiften/Whiteboard/Elements/WhiteboardElement.h2
-rw-r--r--Swiften/Whiteboard/IncomingWhiteboardSession.cpp24
-rw-r--r--Swiften/Whiteboard/IncomingWhiteboardSession.h8
-rw-r--r--Swiften/Whiteboard/OutgoingWhiteboardSession.cpp29
-rw-r--r--Swiften/Whiteboard/OutgoingWhiteboardSession.h6
-rw-r--r--Swiften/Whiteboard/WhiteboardSession.cpp18
-rw-r--r--Swiften/Whiteboard/WhiteboardSession.h11
7 files changed, 94 insertions, 4 deletions
diff --git a/Swiften/Whiteboard/Elements/WhiteboardElement.h b/Swiften/Whiteboard/Elements/WhiteboardElement.h
index 5095506..2b84a04 100644
--- a/Swiften/Whiteboard/Elements/WhiteboardElement.h
+++ b/Swiften/Whiteboard/Elements/WhiteboardElement.h
@@ -17,5 +17,7 @@ namespace Swift {
public:
virtual ~WhiteboardElement() {}
virtual void accept(WhiteboardElementVisitor& visitor) = 0;
+ virtual std::string getID() const = 0;
+ virtual void setID(const std::string&) = 0;
};
}
diff --git a/Swiften/Whiteboard/IncomingWhiteboardSession.cpp b/Swiften/Whiteboard/IncomingWhiteboardSession.cpp
index 5cdba1a..60faa2e 100644
--- a/Swiften/Whiteboard/IncomingWhiteboardSession.cpp
+++ b/Swiften/Whiteboard/IncomingWhiteboardSession.cpp
@@ -23,4 +23,28 @@ namespace Swift {
std::string IncomingWhiteboardSession::getClientID() const {
return "b";
}
+
+ void IncomingWhiteboardSession::handleIncomingOperation(WhiteboardOperation::ref operation) {
+// std::cout << "incoming pos: " << operation->getPos() << std::endl;
+ WhiteboardInsertOperation::ref insertOp = boost::dynamic_pointer_cast<WhiteboardInsertOperation>(operation);
+ if (insertOp) {
+ WhiteboardOperation::ref op = server.handleClientOperationReceived(insertOp);
+ //std::cout << "in1: " << operation->getID() << " " << operation->getPos() << " " << operation->getParentID() << std::endl;
+ //std::cout << "in2: " << op->getID() << " " << op->getPos() << " " << op->getParentID() << std::endl;
+ onOperationReceived(op);
+ WhiteboardPayload::ref payload = boost::make_shared<WhiteboardPayload>();
+ payload->setOperation(op);
+ sendPayload(payload);
+ } else {
+ std::cout << "unknown operation" << std::endl;
+ }
+ }
+
+ void IncomingWhiteboardSession::handleSendOperationRequest(WhiteboardOperation::ref operation) {
+ //std::cout << "out: " << operation->getID() << " " << operation->getPos() << " " << operation->getParentID()<< std::endl;
+ server.handleLocalOperationReceived(operation);
+ WhiteboardPayload::ref payload = boost::make_shared<WhiteboardPayload>();
+ payload->setOperation(operation);
+ sendPayload(payload);
+ }
}
diff --git a/Swiften/Whiteboard/IncomingWhiteboardSession.h b/Swiften/Whiteboard/IncomingWhiteboardSession.h
index 9971d75..33c1a78 100644
--- a/Swiften/Whiteboard/IncomingWhiteboardSession.h
+++ b/Swiften/Whiteboard/IncomingWhiteboardSession.h
@@ -7,7 +7,7 @@
#pragma once
#include <Swiften/Whiteboard/WhiteboardSession.h>
-
+#include <Swiften/Whiteboard/WhiteboardServer.h>
#include <boost/shared_ptr.hpp>
namespace Swift {
@@ -21,5 +21,11 @@ namespace Swift {
void accept();
std::string getClientID() const;
+
+ private:
+ void handleIncomingOperation(WhiteboardOperation::ref operation);
+ void handleSendOperationRequest(WhiteboardOperation::ref operation);
+
+ WhiteboardServer server;
};
}
diff --git a/Swiften/Whiteboard/OutgoingWhiteboardSession.cpp b/Swiften/Whiteboard/OutgoingWhiteboardSession.cpp
index f0b6d22..da4d3cf 100644
--- a/Swiften/Whiteboard/OutgoingWhiteboardSession.cpp
+++ b/Swiften/Whiteboard/OutgoingWhiteboardSession.cpp
@@ -33,4 +33,33 @@ namespace Swift {
onRequestRejected(toJID_);
}
}
+
+ void OutgoingWhiteboardSession::handleIncomingOperation(WhiteboardOperation::ref operation) {
+// std::cout << "incoming pos: " << operation->getPos() << std::endl;
+ WhiteboardClient::Result pairResult = client.handleServerOperationReceived(operation);
+ if (pairResult.client) {
+ onOperationReceived(pairResult.client);
+ //std::cout << "in1: " << operation->getID() << " " << operation->getPos() << " " << operation->getParentID() << std::endl;
+ //std::cout << "in2: " << pairResult.client->getID() << " " << pairResult.client->getPos() << " " << pairResult.client->getParentID() << std::endl;
+ }
+
+ if (pairResult.server) {
+ //std::cout << "outts: " << pairResult.server->getID() << " " << pairResult.server->getPos() << std::endl;
+ WhiteboardPayload::ref payload = boost::make_shared<WhiteboardPayload>();
+ payload->setOperation(pairResult.server);
+ sendPayload(payload);
+ }
+ }
+
+ void OutgoingWhiteboardSession::handleSendOperationRequest(WhiteboardOperation::ref operation) {
+ //std::cout << "out1: " << operation->getID() << " " << operation->getPos() << " " << operation->getParentID() << std::endl;
+ WhiteboardOperation::ref result = client.handleLocalOperationReceived(operation);
+
+ if (result) {
+ //std::cout << "out2: " << result->getID() << " " << result->getPos()<< " " << result->getParentID()<< std::endl;
+ WhiteboardPayload::ref payload = boost::make_shared<WhiteboardPayload>();
+ payload->setOperation(result);
+ sendPayload(payload);
+ }
+ }
}
diff --git a/Swiften/Whiteboard/OutgoingWhiteboardSession.h b/Swiften/Whiteboard/OutgoingWhiteboardSession.h
index 5cc0f42..fbd0f20 100644
--- a/Swiften/Whiteboard/OutgoingWhiteboardSession.h
+++ b/Swiften/Whiteboard/OutgoingWhiteboardSession.h
@@ -7,7 +7,7 @@
#pragma once
#include <Swiften/Whiteboard/WhiteboardSession.h>
-
+#include <Swiften/Whiteboard/WhiteboardClient.h>
#include <boost/shared_ptr.hpp>
#include <Swiften/Queries/GenericRequest.h>
@@ -24,5 +24,9 @@ namespace Swift {
private:
void handleRequestResponse(boost::shared_ptr<WhiteboardPayload> payload, ErrorPayload::ref error);
+ void handleIncomingOperation(WhiteboardOperation::ref operation);
+ void handleSendOperationRequest(WhiteboardOperation::ref operation);
+
+ WhiteboardClient client;
};
}
diff --git a/Swiften/Whiteboard/WhiteboardSession.cpp b/Swiften/Whiteboard/WhiteboardSession.cpp
index d9dc592..2828436 100644
--- a/Swiften/Whiteboard/WhiteboardSession.cpp
+++ b/Swiften/Whiteboard/WhiteboardSession.cpp
@@ -27,7 +27,9 @@ namespace Swift {
switch (payload->getType()) {
case WhiteboardPayload::Data:
- onElementReceived(payload->getElement());
+ //onElementReceived(payload->getElement());
+// onOperationReceived(payload->getOperation());
+ handleIncomingOperation(payload->getOperation());
break;
case WhiteboardPayload::SessionAccept:
onRequestAccepted(toJID_);
@@ -42,6 +44,20 @@ namespace Swift {
request->send();
}
+ void WhiteboardSession::sendOperation(const WhiteboardOperation::ref operation) {
+/* boost::shared_ptr<WhiteboardPayload> payload = boost::make_shared<WhiteboardPayload>();
+ // payload->setElement(operation->getElement());
+ payload->setOperation(operation);
+ boost::shared_ptr<GenericRequest<WhiteboardPayload> > request = boost::make_shared<GenericRequest<WhiteboardPayload> >(IQ::Set, toJID_, payload, router_);
+ request->send();*/
+ handleSendOperationRequest(operation);
+ }
+
+ void WhiteboardSession::sendPayload(boost::shared_ptr<WhiteboardPayload> payload) {
+ boost::shared_ptr<GenericRequest<WhiteboardPayload> > request = boost::make_shared<GenericRequest<WhiteboardPayload> >(IQ::Set, toJID_, payload, router_);
+ request->send();
+ }
+
void WhiteboardSession::cancel() {
boost::shared_ptr<WhiteboardPayload> payload = boost::make_shared<WhiteboardPayload>(WhiteboardPayload::SessionTerminate);
boost::shared_ptr<GenericRequest<WhiteboardPayload> > request = boost::make_shared<GenericRequest<WhiteboardPayload> >(IQ::Set, toJID_, payload, router_);
diff --git a/Swiften/Whiteboard/WhiteboardSession.h b/Swiften/Whiteboard/WhiteboardSession.h
index 0d10af3..7fb03e6 100644
--- a/Swiften/Whiteboard/WhiteboardSession.h
+++ b/Swiften/Whiteboard/WhiteboardSession.h
@@ -12,6 +12,7 @@
#include <Swiften/Base/boost_bsignals.h>
#include <Swiften/Queries/GenericRequest.h>
#include <Swiften/Whiteboard/Elements/WhiteboardElement.h>
+#include <Swiften/Whiteboard/Operations/WhiteboardOperation.h>
namespace Swift {
class IQRouter;
@@ -27,18 +28,26 @@ namespace Swift {
virtual ~WhiteboardSession();
void handleIncomingAction(boost::shared_ptr<WhiteboardPayload> payload);
void sendElement(const WhiteboardElement::ref element);
+ void sendOperation(WhiteboardOperation::ref operation);
void cancel();
const JID& getTo() const;
virtual std::string getClientID() const = 0;
public:
- boost::signal< void(const WhiteboardElement::ref element)> onElementReceived;
+ boost::signal< void(const WhiteboardElement::ref element)> onElementReceived;
+ boost::signal< void(const WhiteboardOperation::ref operation)> onOperationReceived;
boost::signal< void(const JID& contact)> onSessionTerminateReceived;
boost::signal< void(const JID& contact)> onRequestAccepted;
boost::signal< void(const JID& contact)> onSessionCancelled;
boost::signal< void(const JID& contact)> onRequestRejected;
+ private:
+ virtual void handleIncomingOperation(WhiteboardOperation::ref operation) = 0;
+ virtual void handleSendOperationRequest(WhiteboardOperation::ref operation) = 0;
+
protected:
+ void sendPayload(boost::shared_ptr<WhiteboardPayload> payload);
+
JID toJID_;
IQRouter* router_;
};