From f14020493b713239d531385d04512fea142a09dc Mon Sep 17 00:00:00 2001 From: codeboss <2422523675@qq.com> Date: Mon, 18 Nov 2024 22:59:45 +0800 Subject: [PATCH] up --- PenetrateBasic/PenetrateBasic.vcxproj | 6 +- PenetrateBasic/PenetrateBasic.vcxproj.filters | 8 +- PenetrateBasic/data_types.h | 77 ++++++--- PenetrateBasic/msgs_types.cpp | 12 -- PenetrateBasic/msgs_types.h | 10 -- PenetrateBasic/validate_depict.cpp | 149 ++++++++++++++++++ PenetrateBasic/validate_depict.h | 81 ++++++++++ 7 files changed, 289 insertions(+), 54 deletions(-) delete mode 100644 PenetrateBasic/msgs_types.cpp delete mode 100644 PenetrateBasic/msgs_types.h create mode 100644 PenetrateBasic/validate_depict.cpp create mode 100644 PenetrateBasic/validate_depict.h diff --git a/PenetrateBasic/PenetrateBasic.vcxproj b/PenetrateBasic/PenetrateBasic.vcxproj index c0625c9..f4b86e0 100644 --- a/PenetrateBasic/PenetrateBasic.vcxproj +++ b/PenetrateBasic/PenetrateBasic.vcxproj @@ -37,7 +37,7 @@ 5.12.11_msvc2017_64 - core;network + core;xml;network debug @@ -94,14 +94,14 @@ - + - + diff --git a/PenetrateBasic/PenetrateBasic.vcxproj.filters b/PenetrateBasic/PenetrateBasic.vcxproj.filters index d31cbcb..b0688ee 100644 --- a/PenetrateBasic/PenetrateBasic.vcxproj.filters +++ b/PenetrateBasic/PenetrateBasic.vcxproj.filters @@ -29,7 +29,7 @@ Source Files - + Source Files @@ -46,9 +46,6 @@ Header Files - - Header Files - Header Files @@ -58,5 +55,8 @@ Header Files + + Header Files + \ No newline at end of file diff --git a/PenetrateBasic/data_types.h b/PenetrateBasic/data_types.h index a879b8e..7e1b540 100644 --- a/PenetrateBasic/data_types.h +++ b/PenetrateBasic/data_types.h @@ -4,63 +4,90 @@ #include namespace datas { + class IDataComplex { + public: + virtual ~IDataComplex() = default; + + /** + * @brief 是否空对象. + * + * \return 结果 + */ + virtual bool isEmpty() const = 0; + + /** + * @brief 是否Array. + * + * \return + */ + virtual bool isArray() const = 0; + + /** + * @brief 是否Object. + * + * \return + */ + virtual bool isObject() const = 0; + }; + class IDataArray; - class IDataObject { + class IDataObject : public datas::IDataComplex { public: virtual ~IDataObject() = default; /** - * @brief 是否空对象. - * - * \return 结果 + * @brief 构建一个新的Array对象. + * + * \return */ - virtual bool isEmpty() const = 0; + virtual std::shared_ptr newArray() const = 0;; /** - * @brief 当前对象是否是Array. - * - * \return 结果 + * @brief 构建一个新的Object. + * + * \return */ - virtual bool isArray() const = 0; + virtual std::shared_ptr newObject() const = 0; /** - * @brief 转换成Array. + * @brief 获取子对象. * + * \param key * \return */ - virtual std::shared_ptr toArray() = 0; + virtual std::shared_ptr getChild(const QString &key) const = 0; + virtual void setChild(const QString &key, std::shared_ptr obj) = 0; + + + /** + * @brief 指定字段是值类型. + * + * \param key + * \return + */ + virtual bool isValueField(const QString& key) const = 0; virtual bool getBool(const QString& key) const = 0; virtual double getDouble(const QString& key) const = 0; virtual int32_t getInt32(const QString& key) const = 0; virtual int64_t getInt64(const QString& key) const = 0; virtual QString getString(const QString& key) const = 0; - /** - * @brief 获取指定对象,若无指定对象则返回一个不关联的空对象. - * - * \param key - * \return - */ - virtual std::shared_ptr getObject(const QString& key) const = 0; virtual void setBool(const QString& key, bool value) = 0; virtual void setDouble(const QString& key, double value) = 0; virtual void setInt32(const QString& key, int32_t value) = 0; virtual void setInt64(const QString& key, int64_t value) = 0; virtual void setString(const QString& key, const QString& value) = 0; - virtual void setObject(const QString& key, std::shared_ptr value) = 0; virtual QString toText() const = 0; virtual void loadFrom(const QString &text) = 0; }; - class IDataArray : public IDataObject { + class IDataArray : public datas::IDataComplex { public: virtual ~IDataArray() = default; - virtual bool isValid() const = 0; - virtual int32_t size() const = 0; - virtual std::shared_ptr get(int index) const = 0; - virtual void insert(int index, std::shared_ptr value) = 0; - virtual void append(std::shared_ptr value) = 0; + virtual std::shared_ptr get(int index) const = 0; + virtual void insert(int index, std::shared_ptr value) = 0; + virtual void append(std::shared_ptr value) = 0; }; diff --git a/PenetrateBasic/msgs_types.cpp b/PenetrateBasic/msgs_types.cpp deleted file mode 100644 index 06a7353..0000000 --- a/PenetrateBasic/msgs_types.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include "msgs_types.h" - -using namespace msgs; - -QByteArray getMessage(const datas::IDataObject& obj) { - auto content = obj.toText().toUtf8(); - auto header = QString(u8"Content-Length:%1\n").arg(content.length()); - - auto u8_content = header.toUtf8(); - u8_content.append(content); - return u8_content; -} diff --git a/PenetrateBasic/msgs_types.h b/PenetrateBasic/msgs_types.h deleted file mode 100644 index 04ed2b4..0000000 --- a/PenetrateBasic/msgs_types.h +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once - -#include -#include "data_types.h" - -namespace msgs { - QByteArray getMessage(const datas::IDataObject &obj); - - -} diff --git a/PenetrateBasic/validate_depict.cpp b/PenetrateBasic/validate_depict.cpp new file mode 100644 index 0000000..f8a04b3 --- /dev/null +++ b/PenetrateBasic/validate_depict.cpp @@ -0,0 +1,149 @@ +#include "validate_depict.h" + +using namespace datas; +using namespace depict; + +depict::ValidateDocObject::ValidateDocObject(QJsonObject obj) : _object_bind(obj) { } + +depict::ValidateDocObject::ValidateDocObject() { } + +bool ValidateDocObject::isEmpty() const { + return _object_bind.isEmpty(); +} + +bool ValidateDocObject::isArray() const { + return false; +} + +bool ValidateDocObject::isObject() const { + return true; +} + +std::shared_ptr ValidateDocObject::newArray() const { + return std::shared_ptr(); +} + +std::shared_ptr ValidateDocObject::newObject() const { + return std::shared_ptr(); +} + +std::shared_ptr ValidateDocObject::getChild(const QString& key) const { + auto t_obj = _object_bind.value(key); + if (t_obj.isArray()) + return std::make_shared(t_obj.toArray()); + if (t_obj.isObject()) + return std::make_shared(t_obj.toObject()); + return nullptr; +} + +void ValidateDocObject::setChild(const QString& key, std::shared_ptr obj) { + if (obj->isArray()) { + this->_object_bind[key] = std::dynamic_pointer_cast(obj)->_array_bind; + } + else if (obj->isObject()) { + this->_object_bind[key] = std::dynamic_pointer_cast(obj)->_object_bind; + } +} + +bool ValidateDocObject::isValueField(const QString& key) const { + auto val = _object_bind.value(key); + if (val.isArray() || val.isObject()) + return false; + return true; +} + +bool ValidateDocObject::getBool(const QString& key) const { + return _object_bind.value(key).toBool(); +} + +double ValidateDocObject::getDouble(const QString& key) const { + return _object_bind.value(key).toDouble(); +} + +int32_t ValidateDocObject::getInt32(const QString& key) const { + return _object_bind.value(key).toInt(); +} + +#include +int64_t ValidateDocObject::getInt64(const QString& key) const { + return _object_bind.value(key).toVariant().toLongLong(); +} + +QString ValidateDocObject::getString(const QString& key) const { + return _object_bind.value(key).toString(); +} + +void ValidateDocObject::setBool(const QString& key, bool value) { + _object_bind[key] = value; +} + +void ValidateDocObject::setDouble(const QString& key, double value) { + _object_bind[key] = value; +} + +void ValidateDocObject::setInt32(const QString& key, int32_t value) { + _object_bind[key] = value; +} + +void ValidateDocObject::setInt64(const QString& key, int64_t value) { + _object_bind[key] = value; +} + +void ValidateDocObject::setString(const QString& key, const QString& value) { + _object_bind[key] = value; +} + +#include +QString ValidateDocObject::toText() const { + return QString::fromUtf8(QJsonDocument(_object_bind).toJson(QJsonDocument::JsonFormat::Compact)); +} + +void ValidateDocObject::loadFrom(const QString& text) { + auto doc = QJsonDocument::fromJson(text.toUtf8()); + _object_bind = doc.object(); +} + +depict::ValidateDocArray::ValidateDocArray(QJsonArray array) : _array_bind(array) { } + +depict::ValidateDocArray::ValidateDocArray() { } + +bool depict::ValidateDocArray::isEmpty() const { + return !_array_bind.size(); +} + +bool depict::ValidateDocArray::isArray() const { + return true; +} + +bool depict::ValidateDocArray::isObject() const { + return false; +} + +int32_t depict::ValidateDocArray::size() const { + return _array_bind.size(); +} + +std::shared_ptr depict::ValidateDocArray::get(int index) const { + auto val = _array_bind.at(index); + if (val.isArray()) + return std::make_shared(val.toArray()); + + if (val.isObject()) + return std::make_shared(val.toObject()); + + return nullptr; +} + +void depict::ValidateDocArray::insert(int index, std::shared_ptr value) { + if (value->isArray()) + _array_bind.insert(index, std::dynamic_pointer_cast(value)->_array_bind); + if (value->isObject()) + _array_bind.insert(index, std::dynamic_pointer_cast(value)->_object_bind); +} + +void depict::ValidateDocArray::append(std::shared_ptr value) { + if (value->isArray()) + _array_bind.append(std::dynamic_pointer_cast(value)->_array_bind); + if (value->isObject()) + _array_bind.append(std::dynamic_pointer_cast(value)->_object_bind); +} diff --git a/PenetrateBasic/validate_depict.h b/PenetrateBasic/validate_depict.h new file mode 100644 index 0000000..1dec1f1 --- /dev/null +++ b/PenetrateBasic/validate_depict.h @@ -0,0 +1,81 @@ +#pragma once + +#include +#include +#include "data_types.h" + +namespace depict { + class ValidateDocArray; + class ValidateDocObject : public datas::IDataObject { + friend class ValidateDocArray; + private: + QJsonObject _object_bind; + + public: + ValidateDocObject(QJsonObject obj); + ValidateDocObject(); + + // 通过 IDataObject 继承 + bool isEmpty() const override; + + bool isArray() const override; + + bool isObject() const override; + + std::shared_ptr newArray() const override; + + std::shared_ptr newObject() const override; + + std::shared_ptr getChild(const QString& key) const override; + + void setChild(const QString& key, std::shared_ptr obj) override; + + bool isValueField(const QString& key) const override; + + bool getBool(const QString& key) const override; + + double getDouble(const QString& key) const override; + + int32_t getInt32(const QString& key) const override; + + int64_t getInt64(const QString& key) const override; + + QString getString(const QString& key) const override; + + void setBool(const QString& key, bool value) override; + + void setDouble(const QString& key, double value) override; + + void setInt32(const QString& key, int32_t value) override; + + void setInt64(const QString& key, int64_t value) override; + + void setString(const QString& key, const QString& value) override; + + QString toText() const override; + + void loadFrom(const QString& text) override; + + }; + + class ValidateDocArray : public datas::IDataArray { + friend class ValidateDocObject; + private: + QJsonArray _array_bind; + + public: + ValidateDocArray(QJsonArray array); + ValidateDocArray(); + + // 通过 IDataArray 继承 + bool isEmpty() const override; + bool isArray() const override; + bool isObject() const override; + int32_t size() const override; + std::shared_ptr get(int index) const override; + void insert(int index, std::shared_ptr value) override; + void append(std::shared_ptr value) override; + }; + + +}