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;
+ };
+
+
+}