test/TileQueueTests.cpp | 10 +++++----- wsd/ClientSession.hpp | 8 ++++++-- wsd/DocumentBroker.cpp | 2 +- wsd/PrisonerSession.cpp | 1 + wsd/SenderQueue.hpp | 24 +++++++++++++++++++++--- wsd/TileCache.cpp | 2 ++ 6 files changed, 36 insertions(+), 11 deletions(-)
New commits: commit 16eb1968206811a214e6f8e045313c0ec5f667cf Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Sat Jan 21 16:14:36 2017 -0500 wsd: each Message object now has a unique ID for logging purposes Change-Id: I5f3c3afec57f3d9336e0994a1d87421281028d79 Reviewed-on: https://gerrit.libreoffice.org/33426 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/test/TileQueueTests.cpp b/test/TileQueueTests.cpp index 747686c..8149d1c 100644 --- a/test/TileQueueTests.cpp +++ b/test/TileQueueTests.cpp @@ -285,7 +285,7 @@ void TileQueueTests::testSenderQueue() for (const auto& msg : messages) { - queue.enqueue(std::make_shared<MessagePayload>(msg)); + queue.enqueue(std::make_shared<MessagePayload>(msg, MessagePayload::Dir::Out)); } CPPUNIT_ASSERT_EQUAL(3UL, queue.size()); @@ -324,7 +324,7 @@ void TileQueueTests::testSenderQueueTileDeduplication() for (const auto& msg : part_messages) { - queue.enqueue(std::make_shared<MessagePayload>(msg)); + queue.enqueue(std::make_shared<MessagePayload>(msg, MessagePayload::Dir::Out)); } CPPUNIT_ASSERT_EQUAL(3UL, queue.size()); @@ -343,7 +343,7 @@ void TileQueueTests::testSenderQueueTileDeduplication() for (const auto& msg : dup_messages) { - queue.enqueue(std::make_shared<MessagePayload>(msg)); + queue.enqueue(std::make_shared<MessagePayload>(msg, MessagePayload::Dir::Out)); } CPPUNIT_ASSERT_EQUAL(1UL, queue.size()); @@ -374,7 +374,7 @@ void TileQueueTests::testInvalidateViewCursorDeduplication() for (const auto& msg : view_messages) { - queue.enqueue(std::make_shared<MessagePayload>(msg)); + queue.enqueue(std::make_shared<MessagePayload>(msg, MessagePayload::Dir::Out)); } CPPUNIT_ASSERT_EQUAL(3UL, queue.size()); @@ -402,7 +402,7 @@ void TileQueueTests::testInvalidateViewCursorDeduplication() for (const auto& msg : dup_messages) { - queue.enqueue(std::make_shared<MessagePayload>(msg)); + queue.enqueue(std::make_shared<MessagePayload>(msg, MessagePayload::Dir::Out)); } CPPUNIT_ASSERT_EQUAL(1UL, queue.size()); diff --git a/wsd/ClientSession.hpp b/wsd/ClientSession.hpp index 57345bb..17904be 100644 --- a/wsd/ClientSession.hpp +++ b/wsd/ClientSession.hpp @@ -51,14 +51,18 @@ public: bool sendBinaryFrame(const char* buffer, int length) override { - auto payload = std::make_shared<MessagePayload>(buffer, length, MessagePayload::Type::Binary); + auto payload = std::make_shared<MessagePayload>(buffer, length, + MessagePayload::Dir::Out, + MessagePayload::Type::Binary); enqueueSendMessage(payload); return true; } bool sendTextFrame(const char* buffer, const int length) override { - auto payload = std::make_shared<MessagePayload>(buffer, length, MessagePayload::Type::Text); + auto payload = std::make_shared<MessagePayload>(buffer, length, + MessagePayload::Dir::Out, + MessagePayload::Type::Text); enqueueSendMessage(payload); return true; } diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp index e532fb5..0b049a5 100644 --- a/wsd/DocumentBroker.cpp +++ b/wsd/DocumentBroker.cpp @@ -693,7 +693,7 @@ void DocumentBroker::alertAllUsers(const std::string& msg) { Util::assertIsLocked(_mutex); - auto payload = std::make_shared<MessagePayload>(msg); + auto payload = std::make_shared<MessagePayload>(msg, MessagePayload::Dir::Out); LOG_DBG("Alerting all users of [" << _docKey << "]: " << msg); for (auto& it : _sessions) diff --git a/wsd/PrisonerSession.cpp b/wsd/PrisonerSession.cpp index 16cb760..2a78950 100644 --- a/wsd/PrisonerSession.cpp +++ b/wsd/PrisonerSession.cpp @@ -282,6 +282,7 @@ bool PrisonerSession::forwardToPeer(const std::shared_ptr<ClientSession>& client LOG_TRC(getName() << " -> " << clientSession->getName() << ": " << message); auto payload = std::make_shared<MessagePayload>(buffer, length, + MessagePayload::Dir::Out, binary ? MessagePayload::Type::Binary : MessagePayload::Type::Text); clientSession->enqueueSendMessage(payload); diff --git a/wsd/SenderQueue.hpp b/wsd/SenderQueue.hpp index 900dd94..c8e87a1 100644 --- a/wsd/SenderQueue.hpp +++ b/wsd/SenderQueue.hpp @@ -32,15 +32,18 @@ class MessagePayload public: enum class Type { Text, JSON, Binary }; + enum class Dir { In, Out }; /// Construct a text message. /// message must include the full first-line. MessagePayload(const std::string& message, + const enum Dir dir, const enum Type type = Type::Text) : _data(message.data(), message.data() + message.size()), _tokens(LOOLProtocol::tokenize(_data.data(), _data.size())), + _id(makeId(dir)), _firstLine(LOOLProtocol::getFirstLine(_data.data(), _data.size())), - _abbreviation(LOOLProtocol::getAbbreviatedMessage(_data.data(), _data.size())), + _abbreviation(_id + ' ' + LOOLProtocol::getAbbreviatedMessage(_data.data(), _data.size())), _type(type) { } @@ -49,12 +52,14 @@ public: /// reserve extra space (total, including message). /// message must include the full first-line. MessagePayload(const std::string& message, + const enum Dir dir, const enum Type type, const size_t reserve) : _data(std::max(reserve, message.size())), _tokens(LOOLProtocol::tokenize(message)), + _id(makeId(dir)), _firstLine(LOOLProtocol::getFirstLine(message)), - _abbreviation(LOOLProtocol::getAbbreviatedMessage(message)), + _abbreviation(_id + ' ' + LOOLProtocol::getAbbreviatedMessage(message)), _type(type) { _data.resize(message.size()); @@ -65,11 +70,13 @@ public: /// data must be include the full first-line. MessagePayload(const char* p, const size_t len, + const enum Dir dir, const enum Type type) : _data(p, p + len), _tokens(LOOLProtocol::tokenize(_data.data(), _data.size())), + _id(makeId(dir)), _firstLine(LOOLProtocol::getFirstLine(_data.data(), _data.size())), - _abbreviation(LOOLProtocol::getAbbreviatedMessage(_data.data(), _data.size())), + _abbreviation(_id + ' ' + LOOLProtocol::getAbbreviatedMessage(_data.data(), _data.size())), _type(type) { } @@ -81,6 +88,7 @@ public: const std::string& firstToken() const { return _tokens[0]; } const std::string& firstLine() const { return _firstLine; } const std::string& abbreviation() const { return _abbreviation; } + const std::string& id() const { return _id; } /// Returns the json part of the message, if any. std::string jsonString() const @@ -106,8 +114,18 @@ public: bool isBinary() const { return _type == Type::Binary; } private: + + /// Constructs a unique ID. + static std::string makeId(const enum Dir dir) + { + static std::atomic<unsigned> Counter; + return (dir == Dir::In ? 'i' : 'o') + std::to_string(++Counter); + } + +private: std::vector<char> _data; const std::vector<std::string> _tokens; + const std::string _id; const std::string _firstLine; const std::string _abbreviation; const Type _type; diff --git a/wsd/TileCache.cpp b/wsd/TileCache.cpp index 4e784f5..e8fbebc 100644 --- a/wsd/TileCache.cpp +++ b/wsd/TileCache.cpp @@ -169,6 +169,7 @@ void TileCache::saveTileAndNotify(const TileDesc& tile, const char *data, const // Send to first subscriber as-is (without cache marker). auto payload = std::make_shared<MessagePayload>(response, + MessagePayload::Dir::Out, MessagePayload::Type::Binary, response.size() + 1 + size); payload->append("\n", 1); @@ -189,6 +190,7 @@ void TileCache::saveTileAndNotify(const TileDesc& tile, const char *data, const // Create a new Payload. payload.reset(); payload = std::make_shared<MessagePayload>(response, + MessagePayload::Dir::Out, MessagePayload::Type::Binary, response.size() + size); payload->append(data, size); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits