diff options
Diffstat (limited to 'src/com/isode/stroke/whiteboard/IncomingWhiteboardSession.java')
-rw-r--r-- | src/com/isode/stroke/whiteboard/IncomingWhiteboardSession.java | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/com/isode/stroke/whiteboard/IncomingWhiteboardSession.java b/src/com/isode/stroke/whiteboard/IncomingWhiteboardSession.java new file mode 100644 index 0000000..0ed9a01 --- /dev/null +++ b/src/com/isode/stroke/whiteboard/IncomingWhiteboardSession.java @@ -0,0 +1,60 @@ +package com.isode.stroke.whiteboard; + +import com.isode.stroke.elements.IQ; +import com.isode.stroke.elements.WhiteboardOperation; +import com.isode.stroke.elements.WhiteboardPayload; +import com.isode.stroke.jid.JID; +import com.isode.stroke.queries.GenericRequest; +import com.isode.stroke.queries.IQRouter; + +public class IncomingWhiteboardSession extends WhiteboardSession { + + private final WhiteboardClient client = new WhiteboardClient(); + + public IncomingWhiteboardSession(JID jid, IQRouter router) { + super(jid, router); + } + + public void accept() { + WhiteboardPayload payload = new WhiteboardPayload(WhiteboardPayload.Type.SessionAccept); + GenericRequest<WhiteboardPayload> request = + new GenericRequest<WhiteboardPayload>(IQ.Type.Set, toJID_, payload, router_); + request.send(); + onRequestAccepted.emit(toJID_); + } + + @Override + public void sendOperation(WhiteboardOperation operation) { + operation.setID(idGenerator_.generateID()); + operation.setParentID(lastOpID_); + lastOpID_ = operation.getID(); + + WhiteboardOperation result = client.handleLocalOperationReceived(operation); + + if (result != null) { + WhiteboardPayload payload = new WhiteboardPayload(); + payload.setOperation(result); + sendPayload(payload); + } + } + + @Override + protected void handleIncomingOperation(WhiteboardOperation operation) { + WhiteboardClient.Result pairResult = client.handleServerOperationReceived(operation); + if (pairResult.client != null) { + if (pairResult.client.getPos() != -1) { + onOperationReceived.emit(pairResult.client); + } + lastOpID_ = pairResult.client.getID(); + } + + if (pairResult.server != null) { + WhiteboardPayload payload = new WhiteboardPayload(); + payload.setOperation(pairResult.server); + sendPayload(payload); + } + } + + + +} |