{"id":21023431,"url":"https://github.com/quasarapp/heart","last_synced_at":"2025-08-20T02:14:28.741Z","repository":{"id":39693984,"uuid":"213564065","full_name":"QuasarApp/Heart","owner":"QuasarApp","description":"QuasarApp Heart - it is base backend for C++/Qt projects. This library support work with databases and work with lite network requests.","archived":false,"fork":false,"pushed_at":"2025-08-05T12:16:13.000Z","size":6600,"stargazers_count":4,"open_issues_count":2,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-08-05T14:20:31.179Z","etag":null,"topics":["cpp"],"latest_commit_sha":null,"homepage":"https://quasarapp.ddns.net:3031/docs/QuasarApp/Heart/latest/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/QuasarApp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-10-08T06:23:32.000Z","updated_at":"2025-05-01T10:58:24.000Z","dependencies_parsed_at":"2023-02-17T09:01:10.719Z","dependency_job_id":"883eab3d-3fe4-4c32-ac12-cbd9daef8139","html_url":"https://github.com/QuasarApp/Heart","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/QuasarApp/Heart","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuasarApp%2FHeart","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuasarApp%2FHeart/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuasarApp%2FHeart/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuasarApp%2FHeart/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/QuasarApp","download_url":"https://codeload.github.com/QuasarApp/Heart/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuasarApp%2FHeart/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271252993,"owners_count":24726918,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-20T02:00:09.606Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp"],"created_at":"2024-11-19T11:18:08.769Z","updated_at":"2025-08-20T02:14:28.721Z","avatar_url":"https://github.com/QuasarApp.png","language":"C++","readme":"# QuasarApp Heart\n\n# ![QuasarApp Heart](res/Banner_Web.png)\n\nQuasarApp Heart - it is base backend for C++/Qt projects. This library support work with databases and work with lite network requests.\n\n## Futures \nThis library consists of two levels (AbstractNode level and DataBaseNode level).\n\n- [X] Support ssl sockets\n- [X] Support initialize database\n- [X] Support work in database\n\n\n## Build and Include\n### For cmake projects\n \n * cd yourRepo\n * git submodule add https://github.com/QuasarApp/Heart.git # add the repository of Heart into your repo like submodule\n * git submodule update --init --recursive\n * Include in your CMakeLists.txt file the main CMakeLists.txt file of Heart library\n \n     ```cmake\n     add_subdirectory(Heart)\n     ```\n     \n * link the Heart library to your target\n     ```cmake\n     target_link_libraries(yourLib PUBLIC Heart)\n     ```\n * rebuild yuor project\n\n\n\n## Usage\n\nCreate a own package class and override some basic methods.\n\n```cpp\n\nclass MyPackage: public QH::AbstractData\n{\npublic:\n    MyPackage();\n\n    // override this method for validation your package class\n    bool isValid() const {\n        return AbstractData::isValid();\n    };                     \n\n    // your data for for server of client\n    std::string _data = \"\";\n\nprotected:\n    // StreamBase interface override this methods for serialization your package\n    QDataStream \u0026fromStream(QDataStream \u0026stream) {\n        stream \u003e\u003e _data;\n        return stream;\n    }\n    QDataStream \u0026toStream(QDataStream \u0026stream) const {\n        stream \u003c\u003c _data;\n        return stream;\n    }\n\n};\n```\n\nCreate your parser api class. \n\n```cpp\n*\n* class MyParser: public QH::iParser {\n   public:\n       MyParser(QH::AbstractNode* parentNode): QH::iParser(parentNode) {\n           registerPackageType\u003cMyPackage\u003e();\n           data = new BigPackage();\n   }\n\n   // iParser interface\n   public:\n\n   // override this method for processed received data.\n   ParserResult parsePackage(const Package \u0026pkg,\n                             const AbstractNodeInfo *sender) {\n\n       auto parentResult = AbstractNode::parsePackage(pkg, sender);\n       if (parentResult != ParserResult::NotProcessed) {\n           return parentResult;\n       }\n\n       auto result = commandHandler\u003cMyPackage\u003e(this, \u0026MyClass::processMyPackage, pkg, sender, pkgHeader);\n       if (result != QH::ParserResult::NotProcessed) {\n           return result;\n       }\n\n       return ParserResult::NotProcessed;\n   }\n\n   bool processMyPackage(const QSharedPointer\u003cMyPackage\u003e \u0026cardrequest,\n                         const QH::AbstractNodeInfo *sender, const QH::Header \u0026hdr) {\n\n       BaseId requesterId = getSender(sender, \u0026cardrequest);\n\n       if (!cardrequest.isValid()) {\n           badRequest(sender-\u003enetworkAddress(), hdr);\n           return ParserResult::Error;\n       }\n\n       cardrequest._data = \"responce for client \"\n\n       // responce only for servers.\n       if (nodeType() == QH::AbstractNode::NodeType::Server)\n           sendData(cardrequest, sender-\u003enetworkAddress(), \u0026pkg.hdr);\n\n       return ParserResult::Processed;\n   }\n\n   // This vesion of the parser (any digital value.) .\n   int version() const override {return 0;};\n   QString parserId() const override {return \"MyParser\";};\n\n   };\n```\n\nCreate a server class and add supported parsers to work with packages.\n```cpp\nclass TestingServer: public QH::AbstractNode {\nQ_OBJECT\npublic:\n    TestingServer() {\n        addApiParser\u003cMyParser\u003e();\n    }\n\n    QH::AbstractNode::NodeType nodeType() const override {\n        return QH::AbstractNode::NodeType::Server;\n    }\n};\n```\n\nCreate a client class and add supported parsers to work with packages.\n\n```cpp\n\nclass TestingClient: public QH::AbstractNode {\n\npublic:\n    TestingClient() {\n        addApiParser\u003cMyParser\u003e();\n    }\n\n    QH::AbstractNode::NodeType nodeType() const override {\n        return QH::AbstractNode::NodeType::Client;\n    }\n};\n```\nFor more information, see our QuasarApp Heart [Code](https://quasarapp.ddns.net:3031/docs/QuasarApp/Heart/latest/) Documentation.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquasarapp%2Fheart","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fquasarapp%2Fheart","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquasarapp%2Fheart/lists"}