QxOrm 1.4.9
C++ Object Relational Mapping library
Loading...
Searching...
No Matches
QxThread.h
Go to the documentation of this file.
1/****************************************************************************
2**
3** https://www.qxorm.com/
4** Copyright (C) 2013 Lionel Marty (contact@qxorm.com)
5**
6** This file is part of the QxOrm library
7**
8** This software is provided 'as-is', without any express or implied
9** warranty. In no event will the authors be held liable for any
10** damages arising from the use of this software
11**
12** Commercial Usage
13** Licensees holding valid commercial QxOrm licenses may use this file in
14** accordance with the commercial license agreement provided with the
15** Software or, alternatively, in accordance with the terms contained in
16** a written agreement between you and Lionel Marty
17**
18** GNU General Public License Usage
19** Alternatively, this file may be used under the terms of the GNU
20** General Public License version 3.0 as published by the Free Software
21** Foundation and appearing in the file 'license.gpl3.txt' included in the
22** packaging of this file. Please review the following information to
23** ensure the GNU General Public License version 3.0 requirements will be
24** met : http://www.gnu.org/copyleft/gpl.html
25**
26** If you are unsure which license is appropriate for your use, or
27** if you have questions regarding the use of this file, please contact :
28** contact@qxorm.com
29**
30****************************************************************************/
31
32#ifdef Q_MOC_RUN
33#include <QxCommon/QxConfig.h> // Need to include this file for the 'moc' process
34#endif // Q_MOC_RUN
35
36#ifdef _QX_ENABLE_QT_NETWORK
37#ifndef _QX_SERVICE_THREAD_H_
38#define _QX_SERVICE_THREAD_H_
39
40#ifdef _MSC_VER
41#pragma once
42#endif
43
51#ifdef _QX_NO_PRECOMPILED_HEADER
52#ifndef Q_MOC_RUN
53#include <QxPrecompiled.h> // Need to include precompiled header for the generated moc file
54#endif // Q_MOC_RUN
55#endif // _QX_NO_PRECOMPILED_HEADER
56
57#ifdef QT_NO_OPENSSL
58#ifndef QT_NO_SSL
59#define QT_NO_SSL /* Nothing */
60#endif // QT_NO_SSL
61#endif // QT_NO_OPENSSL
62
63#include <QtNetwork/qtcpsocket.h>
64
65#ifndef QT_NO_SSL
66#include <QtNetwork/qsslsocket.h>
67#include <QtNetwork/qsslconfiguration.h>
68#include <QtNetwork/qsslcertificate.h>
69#include <QtNetwork/qsslerror.h>
70#include <QtNetwork/qsslkey.h>
71#endif // QT_NO_SSL
72
73#ifndef Q_MOC_RUN
75#endif // Q_MOC_RUN
76
77#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
78#define QX_TYPE_SOCKET_DESC qintptr
79#else // (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
80#define QX_TYPE_SOCKET_DESC int
81#endif // (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
82
83namespace qx {
84namespace service {
85
86class QxThreadPool;
87
94class QX_DLL_EXPORT QxThread : public QObject
95{
96
97 Q_OBJECT
98
99protected:
100
103 QThread * m_pThread;
107 QMutex m_mutex;
108
109public:
110
111 QxThread(QxThreadPool * pool, QThread * thread) : QObject(), m_iSocketDescriptor(0), m_pThreadPool(pool), m_pThread(thread), m_bIsStopped(false), m_bIsDisconnected(false) { qAssert(m_pThreadPool); qAssert(m_pThread); }
112 virtual ~QxThread() { clearData(); }
113
114 void init();
115 void stop();
116 void wait();
118 void execute(QX_TYPE_SOCKET_DESC socketDescriptor);
119
120protected:
121
122 void quit();
123 void clearData();
125 void doProcess(QTcpSocket & socket);
126 bool checkKeepAlive(QTcpSocket & socket);
128
129#ifndef QT_NO_SSL
130 bool checkSocketSSLEncrypted(QTcpSocket * socket);
131 QSslSocket * initSocketSSL();
132#endif // QT_NO_SSL
133
134Q_SIGNALS:
135
136 void error(const QString & err, qx::service::QxTransaction_ptr transaction);
141 void finished();
142
143private Q_SLOTS:
144
149
150#ifndef QT_NO_SSL
151#ifndef QT_NO_OPENSSL
153 void onSocketSSLErrors(const QList<QSslError> & errors);
154 void onSocketSSLPeerVerifyError(const QSslError & error);
155#endif // QT_NO_OPENSSL
156#endif // QT_NO_SSL
157
158};
159
160} // namespace service
161} // namespace qx
162
163#endif // _QX_SERVICE_THREAD_H_
164#endif // _QX_ENABLE_QT_NETWORK
List of parameters to compile and build QxOrm library.
#define qAssert(x)
Definition QxMacro.h:52
#define QX_DLL_EXPORT
Definition QxMacro.h:182
#define QX_TYPE_SOCKET_DESC
Definition QxThread.h:78
Transaction of QxService module (contains request from client and reply from server)
qx::service::QxThread : thread to execute a transaction of QxService module
Definition QxThread.h:95
QxTransaction_ptr m_pTransaction
Current service transaction.
Definition QxThread.h:104
void onSocketSSLPeerVerifyError(const QSslError &error)
bool m_bIsDisconnected
Socket has been disconnected.
Definition QxThread.h:106
QX_TYPE_SOCKET_DESC m_iSocketDescriptor
Socket descriptor to retrieve 'QTcpSocket'.
Definition QxThread.h:101
QThread * m_pThread
Thread where this worker is executed.
Definition QxThread.h:103
void doProcess(QTcpSocket &socket)
void transactionStarted(qx::service::QxTransaction_ptr transaction)
bool checkKeepAlive(QTcpSocket &socket)
bool checkSocketSSLEncrypted(QTcpSocket *socket)
void customRequestHandler(qx::service::QxTransaction_ptr transaction)
void error(const QString &err, qx::service::QxTransaction_ptr transaction)
bool m_bIsStopped
Set this flag to 'true' to terminate thread.
Definition QxThread.h:105
QMutex m_mutex
Mutex => 'QxThread' is thread-safe.
Definition QxThread.h:107
QxThreadPool * m_pThreadPool
Parent thread pool to set available.
Definition QxThread.h:102
QxThread(QxThreadPool *pool, QThread *thread)
Definition QxThread.h:111
void transactionFinished(qx::service::QxTransaction_ptr transaction)
QSslSocket * initSocketSSL()
void onSocketSSLErrors(const QList< QSslError > &errors)
QX_TYPE_SOCKET_DESC getSocketDescriptor()
void execute(QX_TYPE_SOCKET_DESC socketDescriptor)
qx::service::QxThreadPool : thread-safe thread pool to manage list of threads for executing all trans...
std::shared_ptr< QxTransaction > QxTransaction_ptr
Root namespace for all QxOrm library features.