added base calses for patronum

This commit is contained in:
Andrei Yankovich 2020-04-17 21:55:54 +03:00
parent cc0e4abb36
commit 58f1664320
13 changed files with 283 additions and 2 deletions

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "Potronum/qt-solutions"]
path = Potronum/qt-solutions
url = https://github.com/QuasarApp/qt-solutions.git

18
CMakeLists.txt Executable file
View File

@ -0,0 +1,18 @@
#
# Copyright (C) 2018-2019 QuasarApp.
# Distributed under the lgplv3 software license, see the accompanying
# Everyone is permitted to copy and distribute verbatim copies
# of this license document, but changing it is not allowed.
#
cmake_minimum_required(VERSION 3.1)
project(Potronum)
include(Patronum/qt-solutions/CMake/ccache.cmake)
# Add sub directories
add_subdirectory(Patronum)
include(Patronum/qt-solutions/CMake/QuasarAppCITargets.cmake)
initAll()

36
Patronum/CMakeLists.txt Executable file
View File

@ -0,0 +1,36 @@
#
# Copyright (C) 2018-2020 QuasarApp.
# Distributed under the lgplv3 software license, see the accompanying
# Everyone is permitted to copy and distribute verbatim copies
# of this license document, but changing it is not allowed.
#
cmake_minimum_required(VERSION 3.1)
project(Patronum LANGUAGES CXX)
add_subdirectory(qt-solutions/qtservice)
include(qt-solutions/CMake/ProjectOut.cmake)
include(qt-solutions/CMake/ccache.cmake)
include(qt-solutions/CMake/Version.cmake)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_definitions(-DPATRONUM_LIBRARY)
find_package(Qt5 COMPONENTS Core REQUIRED)
file(GLOB SOURCE_CPP
"src/*.cpp"
)
add_library(${PROJECT_NAME} SHARED ${SOURCE_CPP})
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core Qt-Service)
target_include_directories(${PROJECT_NAME} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/src")
setVersion(0 1 0)

View File

@ -0,0 +1,13 @@
#ifndef PATRONUM_GLOBAL_H
#define PATRONUM_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(PATRONUM_LIBRARY)
# define PATRONUM_LIBRARYSHARED_EXPORT Q_DECL_EXPORT
#else
# define PATRONUM_LIBRARYSHARED_EXPORT Q_DECL_IMPORT
#endif
#endif // PATRONUM_GLOBAL_H

View File

@ -0,0 +1,10 @@
#include "controller.h"
namespace Patronum {
Controller::Controller(const QString &name):
QtServiceController(name)
{
}
}

14
Patronum/src/controller.h Normal file
View File

@ -0,0 +1,14 @@
#ifndef CONTROLLER_H
#define CONTROLLER_H
#include "Patronum_global.h"
#include <qtservice.h>
namespace Patronum {
class PATRONUM_LIBRARYSHARED_EXPORT Controller : public QtServiceController
{
public:
Controller(const QString & name);
};
}
#endif // CONTROLLER_H

View File

@ -0,0 +1,9 @@
#include "isocketwraper.h"
namespace Patronum {
State ISocketWraper::state() const {
return m_state;
}
}

View File

@ -0,0 +1,62 @@
#ifndef SOCKETWRAPER_H
#define SOCKETWRAPER_H
#include <QByteArray>
namespace Patronum {
enum class State: int {
Connected,
Disconeccted
};
class ISocketWraper
{
public:
ISocketWraper(){};
/**
* @brief send - send data to service
* @param data
* @return true if operation finished seccussful
*/
virtual bool send(const QByteArray& data) = 0;
/**
* @brief sigReceve - this method is a prototype of received data signal
* @param data - received data
* @return
*/
virtual void sigReceve(QByteArray data) = 0;
/**
* @brief sigStateChanged - this method is a prototype of chnage state signal
* @param state
*/
virtual void sigStateChanged(State state) = 0;
/**
* @brief isValid - check validation of socket
*/
virtual bool isValid() const = 0;
/**
* @brief reconnect
* @return true if socket connected to host;
*/
virtual bool reconnect() = 0;
State state() const;
protected:
State m_state = State::Disconeccted;
};
}
#endif // SOCKETWRAPER_H

View File

@ -0,0 +1,49 @@
#include "localsocket.h"
#include <QLocalSocket>
namespace Patronum {
LocalSocket::LocalSocket(const QString &target) {
m_socket = new QLocalSocket(this);
m_socket->connectToServer(target);
connect(m_socket, &QLocalSocket::stateChanged,
this, &LocalSocket::handeStateChanged);
connect(m_socket, &QLocalSocket::readyRead,
this, &LocalSocket::handeReadyRead);
}
bool LocalSocket::send(const QByteArray &data) {
if (!isValid()) {
return false;
}
return m_socket->write(data) == data.size();
}
bool LocalSocket::isValid() const {
return m_state == State::Connected;
}
bool LocalSocket::reconnect() {
m_socket->connectToServer();
return isValid();
}
void LocalSocket::handeStateChanged(QLocalSocket::LocalSocketState socketState) {
if (socketState == QLocalSocket::LocalSocketState::ConnectedState) {
m_state = State::Connected;
} else {
m_state = State::Disconeccted;
}
emit sigStateChanged(m_state);
}
void LocalSocket::handeReadyRead() {
auto data = m_socket->readAll();
emit sigReceve(data);
}
}

View File

@ -0,0 +1,44 @@
#ifndef LOCALSOCKET_H
#define LOCALSOCKET_H
#include "isocketwraper.h"
#include <QLocalSocket>
#include <QObject>
namespace Patronum {
/**
* @brief The LocalSocket class
* this socket work only with locale data.
*/
class LocalSocket : public QObject, public ISocketWraper
{
Q_OBJECT
public:
/**
* @brief LocalSocket
* @param target - target it is localSocket name or ip:port
*/
LocalSocket(const QString& target);
// ISocketWraper interface
public:
bool send(const QByteArray &data);
bool isValid() const;
bool reconnect();
signals:
void sigReceve(QByteArray data);
void sigStateChanged(State state);
private:
QLocalSocket *m_socket = nullptr;
private slots:
void handeStateChanged(QLocalSocket::LocalSocketState socketState);
void handeReadyRead();
};
}
#endif // LOCALSOCKET_H

6
Patronum/src/service.cpp Normal file
View File

@ -0,0 +1,6 @@
#include "service.h"
namespace Patronum {
}

17
Patronum/src/service.h Normal file
View File

@ -0,0 +1,17 @@
#ifndef SERVICE_H
#define SERVICE_H
#include "Patronum_global.h"
#include <qtservice.h>
namespace Patronum {
template<class Application>
class PATRONUM_LIBRARYSHARED_EXPORT Service : public QtService<Application>
{
public:
Service();
};
}
#endif // SERVICE_H

View File

@ -1,8 +1,8 @@
# Patronum
This is extension libraries for control your daemons based on QtServices from qt-solutions.
### Why is Patronum
Because this library offer easy interface for control your demons like the magic of Harry Potter offer control dementors.
### Why is Patronum?
Becouse This library offers easy interface to control your demons likewise the magic of Harry Potter controls dementors
## Main features