ImagingTools Core SDK
CTcpServerComp.h
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ImtCore-Commercial
2#pragma once
3
4
5// Qt includes
6#include <QtNetwork/QTcpServer>
7#include <QtNetwork/QTcpSocket>
8
9// ACF includes
10#include <istd/TPointerVector.h>
11#include <ibase/TRuntimeStatusHanderCompWrap.h>
12#include <ilog/TLoggerCompWrap.h>
13#include <istd/TDelPtr.h>
14#include <iprm/IParamsSet.h>
15#include <ifile/IFileNameParam.h>
16#include <imod/CMultiModelDispatcherBase.h>
17
18// ImtCore includes
19#include <imtcom/IServerConnectionInterface.h>
20#include <imtrest/IRequest.h>
21#include <imtrest/IRequestServlet.h>
22#include <imtrest/IProtocolEngine.h>
23#include <imtrest/IResponseDispatcher.h>
24#include <imtrest/IServer.h>
25#include <imtcom/ISslConfigurationManager.h>
26
27
28namespace imtrest
29{
30
31
32class CMultiThreadServer;
33
34
40 public QObject,
41 public ibase::TRuntimeStatusHanderCompWrap<ilog::CLoggerComponentBase>,
42 private imod::CMultiModelDispatcherBase,
43 virtual public IResponseDispatcher,
44 virtual public IServer
45{
46 Q_OBJECT
47public:
48 typedef ibase::TRuntimeStatusHanderCompWrap<ilog::CLoggerComponentBase> BaseClass;
49 typedef imod::CMultiModelDispatcherBase BaseClass2;
50
51 I_BEGIN_COMPONENT(CTcpServerComp);
52 I_REGISTER_INTERFACE(IResponseDispatcher)
53 I_REGISTER_INTERFACE(IServer)
54 I_ASSIGN(m_requestHandlerCompPtr, "RequestHandler", "Request handler registered for the server", true, "RequestHandler");
55 I_ASSIGN(m_protocolEngineCompPtr, "ProtocolEngine", "Protocol engine used in the server", true, "ProtocolEngine");
56 I_ASSIGN(m_threadsLimitAttrPtr, "ThreadsLimit", "Limit of threads", true, 5);
57 I_ASSIGN(m_startServerOnCreateAttrPtr, "StartServerOnCreate", "If enabled, the server will be started on after component creation", true, true);
58 I_ASSIGN(m_serverConnnectionInterfaceCompPtr, "ServerInterface", "Parameter providing the server connection interface to be listened", true, "ServerInterface");
59 I_ASSIGN(m_sslConfigurationCompPtr, "SslConfiguration", "SSL Configuration is used by networking classes to relay information about an open SSL connection and to allow the server to control certain features of that connection.", false, "SslConfiguration")
60 I_ASSIGN_TO(m_sslConfigurationModelCompPtr, m_sslConfigurationCompPtr, false)
61 I_ASSIGN(m_sslConfigurationManagerCompPtr, "SslConfigurationManager", "SSL configuration manager, used to create an SSL configuration for server", false, "SslConfigurationManager")
62 I_END_COMPONENT
63
66
67 imtrest::IRequestServlet* GetRequestServlet();
68 imtrest::IProtocolEngine* GetProtocolEngine();
69 int GetThreadsLimit();
70
71protected:
72 // reimplemented (imod::CMultiModelDispatcherBase)
73 virtual void OnModelChanged(int modelId, const istd::IChangeable::ChangeSet& changeSet) override;
74
75 // reimplemented (ibase::TRuntimeStatusHanderCompWrap)
76 virtual void OnSystemShutdown() override;
77
78 // reimplemented (icomp::CComponentBase)
79 virtual void OnComponentCreated() override;
80
81 // reimplemented (imtrest::IResponseDispatcher)
82 virtual bool SendResponse(const QByteArray& requestId, ConstResponsePtr& response) const override;
83 virtual bool SendRequest(const QByteArray& requestId, ConstRequestPtr& request) const override;
84
85 // reimplemented (imtrest::IServer)
86 virtual bool StartServer() override;
87 virtual bool StopServer() override;
88 virtual ServerStatus GetServerStatus() const override;
89
90private:
91 bool StartListening(const QHostAddress& address = QHostAddress::Any, quint16 port = 0);
92 bool EnsureServerStarted();
93
94private Q_SLOTS:
95 void OnNewThreadConnection(const IRequest* request, const QByteArray& subCommandId);
96
97private:
98 I_REF(imtrest::IRequestServlet, m_requestHandlerCompPtr);
99 I_REF(IProtocolEngine, m_protocolEngineCompPtr);
100 I_REF(imtcom::IServerConnectionInterface, m_serverConnnectionInterfaceCompPtr);
101 I_REF(iprm::IParamsSet, m_sslConfigurationCompPtr);
102 I_REF(imod::IModel, m_sslConfigurationModelCompPtr);
103 I_REF(imtcom::ISslConfigurationManager, m_sslConfigurationManagerCompPtr);
104
105 I_ATTR(int, m_threadsLimitAttrPtr);
106 I_ATTR(bool, m_startServerOnCreateAttrPtr);
107 I_ATTR(bool, m_isMultiThreadingAttrPtr);
108
109
110 istd::TDelPtr<CMultiThreadServer> m_serverPtr;
111
112 typedef istd::TPointerVector<IRequest> Requests;
113 Requests m_requests;
114
115 bool m_isInitialized = false;
116};
117
118
119} // namespace imtrest
120
121
Interface for describing server connection configuration with multi-protocol support.