[Libreoffice-commits] online.git: 2 commits - loleaflet/src loolwsd/ChildSession.cpp loolwsd/ChildSession.hpp loolwsd/LOOLKit.cpp loolwsd/protocol.txt
Pranav Kant
pranavk at collabora.co.uk
Tue Aug 30 07:46:04 UTC 2016
loleaflet/src/layer/tile/TileLayer.js | 4 ++--
loolwsd/ChildSession.cpp | 27 ++++++++++++++-------------
loolwsd/ChildSession.hpp | 5 +++++
loolwsd/LOOLKit.cpp | 32 ++++++++++++++++++++++++++++++++
loolwsd/protocol.txt | 7 +++++--
5 files changed, 58 insertions(+), 17 deletions(-)
New commits:
commit 5e4af6165881795f24fa4a5f6b831349e5390360
Author: Pranav Kant <pranavk at collabora.co.uk>
Date: Tue Aug 30 11:16:58 2016 +0530
loleaflet: Use names echoed from loolwsd for cursors
Change-Id: Ibcb513889c41aa9ec34903fbe68e3dc28d2d1802
Reviewed-on: https://gerrit.libreoffice.org/28483
Reviewed-by: pranavk <pranavk at collabora.co.uk>
Tested-by: pranavk <pranavk at collabora.co.uk>
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index ee32550..db783db 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -656,7 +656,7 @@ L.TileLayer = L.GridLayer.extend({
_onAddViewMsg: function(textMsg) {
textMsg = textMsg.substring('addview:'.length + 1);
var obj = JSON.parse(textMsg);
- var viewId = parseInt(obj.viewId);
+ var viewId = parseInt(obj.id);
var username = obj.username;
// Ignore if viewid is same as ours
@@ -1135,7 +1135,7 @@ L.TileLayer = L.GridLayer.extend({
blink: false,
header: true, // we want a 'hat' to our view cursors (which will contain view user names)
headerTimeout: 1500, // hide after some interval
- headerName: 'Anonymous LOOL User'
+ headerName: this._map.getViewName(viewId)
};
viewCursorMarker = L.cursor(viewCursorPos, viewCursorOptions);
this._map.addLayer(viewCursorMarker);
commit 7d48cd6f175e57ce701be307bfbf782b308ddee9
Author: Pranav Kant <pranavk at collabora.co.uk>
Date: Tue Aug 30 10:49:49 2016 +0530
loolwsd: Echo back view information to clients
View information as of now includes viewid and username
associated with the view.
Change-Id: If0c4957eb56962eb4b1b1d0c1189dc300fa6b857
Reviewed-on: https://gerrit.libreoffice.org/28482
Reviewed-by: pranavk <pranavk at collabora.co.uk>
Tested-by: pranavk <pranavk at collabora.co.uk>
diff --git a/loolwsd/ChildSession.cpp b/loolwsd/ChildSession.cpp
index 67aae9c..93a2312 100644
--- a/loolwsd/ChildSession.cpp
+++ b/loolwsd/ChildSession.cpp
@@ -10,6 +10,8 @@
#include "ChildSession.hpp"
#include "config.h"
+#include <sstream>
+
#include <Poco/JSON/Object.h>
#include <Poco/JSON/Parser.h>
#include <Poco/Net/WebSocket.h>
@@ -97,10 +99,7 @@ bool ChildSession::_handleInput(const char *buffer, int length)
// Refresh the viewIds.
sendTextFrame("remallviews:");
- for (const auto viewId : _docManager.getViewIds())
- {
- sendTextFrame("addview: " + std::to_string(viewId));
- }
+ _docManager.notifyCurrentViewOfOtherViews(getId());
const int curPart = _loKitDocument->getPart();
sendTextFrame("curpart: part=" + std::to_string(curPart));
@@ -326,10 +325,18 @@ bool ChildSession::loadDocument(const char * /*buffer*/, int /*length*/, StringT
if (_multiView)
{
+ std::ostringstream ossViewInfo;
_viewId = _loKitDocument->getView();
const auto viewId = std::to_string(_viewId);
- Log::info("Created new view: " + viewId);
- _docManager.notifyOtherSessions(getId(), "addview: " + viewId);
+
+ // Create a message object
+ Object::Ptr viewInfoObj = new Object();
+ viewInfoObj->set("id", viewId);
+ viewInfoObj->set("username", _userName);
+ viewInfoObj->stringify(ossViewInfo);
+
+ Log::info("Created new view with viewid: [" + viewId + "] for username: [" + _userName + "].");
+ _docManager.notifyOtherSessions(getId(), "addview: " + ossViewInfo.str());
}
_docType = LOKitHelper::getDocumentTypeAsString(_loKitDocument->get());
@@ -348,13 +355,7 @@ bool ChildSession::loadDocument(const char * /*buffer*/, int /*length*/, StringT
}
// Inform this view of other views
- for (const auto viewId: _docManager.getViewIds())
- {
- if (viewId != _viewId)
- {
- sendTextFrame("addview: " + std::to_string(viewId));
- }
- }
+ _docManager.notifyCurrentViewOfOtherViews(getId());
Log::info("Loaded session " + getId());
return true;
diff --git a/loolwsd/ChildSession.hpp b/loolwsd/ChildSession.hpp
index 649a7d3..3295ab4 100644
--- a/loolwsd/ChildSession.hpp
+++ b/loolwsd/ChildSession.hpp
@@ -47,6 +47,10 @@ public:
/// Send message to all other sessions except 'sessionId'
virtual
void notifyOtherSessions(const std::string& sessionId, const std::string& message) const = 0;
+
+ /// Send other view's information to current view (one with sessionId)
+ virtual
+ void notifyCurrentViewOfOtherViews(const std::string& sessionId) const = 0;
};
/// Represents a client session, with the socket end-point,
@@ -70,6 +74,7 @@ public:
bool getStatus(const char *buffer, int length);
bool getPartPageRectangles(const char *buffer, int length);
int getViewId() const { return _viewId; }
+ const std::string getViewUserName() const { return _userName; }
void loKitCallback(const int nType, const std::string& rPayload);
diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp
index 6f4898d..781610f 100644
--- a/loolwsd/LOOLKit.cpp
+++ b/loolwsd/LOOLKit.cpp
@@ -965,6 +965,38 @@ private:
}
}
+ void notifyCurrentViewOfOtherViews(const std::string& sessionId) const override
+ {
+ std::unique_lock<std::mutex> lock(_mutex);
+
+ const auto& it = _connections.find(Util::decodeId(sessionId));
+ if (it == _connections.end() || !it->second)
+ {
+ Log::error("Cannot find current session [" + sessionId + "].");
+ return;
+ }
+
+ auto currentSession = it->second->getSession();
+ for (auto& connectionIt: _connections)
+ {
+ if (connectionIt.second->isRunning() && connectionIt.second->getSessionId() != sessionId)
+ {
+ auto session = connectionIt.second->getSession();
+ const auto viewId = session->getViewId();
+ const auto viewUserName = session->getViewUserName();
+
+ // Create a message object
+ Object::Ptr viewInfoObj = new Object();
+ viewInfoObj->set("id", viewId);
+ viewInfoObj->set("username", viewUserName);
+ std::ostringstream ossViewInfo;
+ viewInfoObj->stringify(ossViewInfo);
+
+ currentSession->sendTextFrame("addview: " + ossViewInfo.str());
+ }
+ }
+ }
+
private:
std::shared_ptr<lok::Document> load(const std::string& sessionId,
diff --git a/loolwsd/protocol.txt b/loolwsd/protocol.txt
index 396a359..332d088 100644
--- a/loolwsd/protocol.txt
+++ b/loolwsd/protocol.txt
@@ -332,9 +332,12 @@ viewlock:
Per-view lock rectangle. JSON payload.
-addview: <viewId>
+addview: <JSON string>
- New view with the given viewId is created.
+ Eg: {"id": "<viewid>",
+ "username": "<name of the user>"}
+
+ New view with the given view information is created.
remview: <viewId>
More information about the Libreoffice-commits
mailing list