common/Message.hpp | 124 ++++++++++++++++++++++++++++++++++++++++++++++++ common/Session.hpp | 1 test/TileQueueTests.cpp | 1 wsd/SenderQueue.hpp | 105 ---------------------------------------- 4 files changed, 126 insertions(+), 105 deletions(-)
New commits: commit 6b17f963182d534e11e64c10d4f14047aea0b4f5 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Sat Jan 21 19:47:49 2017 -0500 wsd: refactor MessagePayload into own file Change-Id: Ifc0d2abd2e94d4a1b58915664fb0545dca6e96cc Reviewed-on: https://gerrit.libreoffice.org/33427 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/common/Message.hpp b/common/Message.hpp new file mode 100644 index 0000000..42e8833 --- /dev/null +++ b/common/Message.hpp @@ -0,0 +1,124 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_MESSAGE_HPP +#define INCLUDED_MESSAGE_HPP + +#include <atomic> +#include <string> +#include <vector> + +/// The payload type used to send/receive data. +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(_id + ' ' + LOOLProtocol::getAbbreviatedMessage(_data.data(), _data.size())), + _type(type) + { + } + + /// Construct a message from a string with type and + /// 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(_id + ' ' + LOOLProtocol::getAbbreviatedMessage(message)), + _type(type) + { + _data.resize(message.size()); + std::memcpy(_data.data(), message.data(), message.size()); + } + + /// Construct a message from a character array with type. + /// 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(_id + ' ' + LOOLProtocol::getAbbreviatedMessage(_data.data(), _data.size())), + _type(type) + { + } + + size_t size() const { return _data.size(); } + const std::vector<char>& data() const { return _data; } + + const std::vector<std::string>& tokens() const { return _tokens; } + 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 + { + if (_tokens.size() > 1 && _tokens[1] == "{") + { + const auto firstTokenSize = _tokens[0].size(); + return std::string(_data.data() + firstTokenSize, _data.size() - firstTokenSize); + } + + return std::string(); + } + + /// Append more data to the message. + void append(const char* p, const size_t len) + { + const auto curSize = _data.size(); + _data.resize(curSize + len); + std::memcpy(_data.data() + curSize, p, len); + } + + /// Returns true if and only if the payload is considered Binary. + 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; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/common/Session.hpp b/common/Session.hpp index c2642d9..26b5626 100644 --- a/common/Session.hpp +++ b/common/Session.hpp @@ -26,6 +26,7 @@ #include <LOOLWebSocket.hpp> #include "Log.hpp" #include "MessageQueue.hpp" +#include "Message.hpp" #include "TileCache.hpp" /// Base class of a LOOLWebSocket session. diff --git a/test/TileQueueTests.cpp b/test/TileQueueTests.cpp index 8149d1c..3c50e61 100644 --- a/test/TileQueueTests.cpp +++ b/test/TileQueueTests.cpp @@ -13,6 +13,7 @@ #include "Common.hpp" #include "Protocol.hpp" +#include "Message.hpp" #include "MessageQueue.hpp" #include "SenderQueue.hpp" #include "Util.hpp" diff --git a/wsd/SenderQueue.hpp b/wsd/SenderQueue.hpp index c8e87a1..4c06560 100644 --- a/wsd/SenderQueue.hpp +++ b/wsd/SenderQueue.hpp @@ -26,111 +26,6 @@ #include "Log.hpp" #include "TileDesc.hpp" -/// The payload type used to send/receive data. -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(_id + ' ' + LOOLProtocol::getAbbreviatedMessage(_data.data(), _data.size())), - _type(type) - { - } - - /// Construct a message from a string with type and - /// 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(_id + ' ' + LOOLProtocol::getAbbreviatedMessage(message)), - _type(type) - { - _data.resize(message.size()); - std::memcpy(_data.data(), message.data(), message.size()); - } - - /// Construct a message from a character array with type. - /// 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(_id + ' ' + LOOLProtocol::getAbbreviatedMessage(_data.data(), _data.size())), - _type(type) - { - } - - size_t size() const { return _data.size(); } - const std::vector<char>& data() const { return _data; } - - const std::vector<std::string>& tokens() const { return _tokens; } - 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 - { - if (_tokens.size() > 1 && _tokens[1] == "{") - { - const auto firstTokenSize = _tokens[0].size(); - return std::string(_data.data() + firstTokenSize, _data.size() - firstTokenSize); - } - - return std::string(); - } - - /// Append more data to the message. - void append(const char* p, const size_t len) - { - const auto curSize = _data.size(); - _data.resize(curSize + len); - std::memcpy(_data.data() + curSize, p, len); - } - - /// Returns true if and only if the payload is considered Binary. - 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; -}; - struct SendItem { std::weak_ptr<LOOLWebSocket> Socket; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits