6#include <QtWebSockets/QWebSocket>
7#include <QtCore/QSharedPointer>
10#include <ilog/TLoggerCompWrap.h>
11#include <ibase/TRuntimeStatusHanderCompWrap.h>
12#include <iprm/IParamsSet.h>
13#include <iprm/IOptionsList.h>
14#include <imod/CMultiModelDispatcherBase.h>
17#include <imtrest/IRequestServlet.h>
18#include <imtrest/IProtocolEngine.h>
19#include <imtrest/ISubscriberEngine.h>
20#include <imtrest/IResponseDispatcher.h>
21#include <imtrest/CWebSocketSender.h>
22#include <imtrest/IServer.h>
23#include <imtcom/IServerConnectionInterface.h>
24#include <imtcom/IConnectionStatusProvider.h>
25#include <imtcom/ISslConfigurationManager.h>
32class CWebSocketThread;
41 public ibase::TRuntimeStatusHanderCompWrap<ilog::CLoggerComponentBase>,
42 private imod::CMultiModelDispatcherBase,
49 typedef ibase::TRuntimeStatusHanderCompWrap<ilog::CLoggerComponentBase> BaseClass;
50 typedef imod::CMultiModelDispatcherBase BaseClass2;
56 I_ASSIGN(m_requestServerHandlerCompPtr,
"RequestServerHandler",
"Request handler registered for the server",
false,
"RequestServerHandler");
57 I_ASSIGN(m_requestClientHandlerCompPtr,
"RequestClientHandler",
"Request handler registered for the client",
false,
"RequestClientHandler");
58 I_ASSIGN(m_protocolEngineCompPtr,
"ProtocolEngine",
"Protocol engine used in the server",
true,
"ProtocolEngine");
59 I_ASSIGN(m_httpProtocolEngineCompPtr,
"HttpProtocolEngine",
"Http Protocol engine used in the server",
false,
"HttpProtocolEngine");
60 I_ASSIGN(m_subscriberEngineCompPtr,
"SubscriberEngine",
"Subscriber engine used in the server",
false,
"SubscriberEngine");
61 I_ASSIGN(m_startServerOnCreateAttrPtr,
"StartServerOnCreate",
"If enabled, the server will be started on after component creation",
true,
true);
62 I_ASSIGN(m_webServerInterfaceCompPtr,
"WebServerConnectionInterface",
"Parameter providing the WebSocket-server port to be listened",
true,
"WebServerConnectionInterface");
63 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")
64 I_ASSIGN_TO(m_sslConfigurationModelCompPtr, m_sslConfigurationCompPtr,
false)
65 I_ASSIGN(m_sslConfigurationManagerCompPtr,
"SslConfigurationManager",
"SSL configuration manager, used to create an SSL configuration for server",
false,
"SslConfigurationManager")
66 I_ASSIGN(m_productId,
"ProductId",
"Product-ID used with corresponded GraphQL-requests",
false,
"");
67 I_ASSIGN(m_subprotocolListCompPtr,
"SupportedSubprotocols",
"Supported Web Socket subprotocols",
false,
"SupportedSubprotocols");
72 imtrest::IRequestServlet* GetRequestServerServlet();
73 imtrest::IRequestServlet* GetRequestClientServlet();
74 QByteArray GetProductId();
75 void SetConnectionStatus(
const QByteArray& clientId);
80 const QString& message,
81 const QString& messageSource = QString(),
84 bool SendErrorMessage(
86 const QString& message,
87 const QString& messageSource = QString(),
90 void SendVerboseMessage(
const QString& message,
const QString& messageSource = QString())
const;
91 void RegisterSender(
const QByteArray& clientId, QWebSocket* webSocketPtr);
95 virtual bool SendResponse(
const QByteArray& requestId, ConstResponsePtr& response)
const override;
96 virtual bool SendRequest(
const QByteArray& requestId, ConstRequestPtr& request)
const override;
100 virtual void OnModelChanged(
int modelId,
const istd::IChangeable::ChangeSet& changeSet)
override;
103 virtual void OnSystemShutdown()
override;
106 virtual void OnComponentCreated()
override;
107 virtual void OnComponentDestroyed()
override;
113 virtual bool StartServer()
override;
114 virtual bool StopServer()
override;
115 virtual ServerStatus GetServerStatus()
const override;
118 bool EnsureServerStarted();
119 bool StartListening(
const QHostAddress& address = QHostAddress::Any, quint16 port = 0);
122 void HandleNewConnections();
123 void OnSocketDisconnected();
125 void OnAcceptError(QAbstractSocket::SocketError socketError);
126 void OnSslErrors(
const QList<QSslError> &errors);
130 istd::TDelPtr<QWebSocketServer> m_webSocketServerPtr;
131 QList<CWebSocketThread*> m_webSocketThreadList;
132 QMap <QByteArray, QSharedPointer<CWebSocketSender>> m_senders;
133 QMap <QByteArray, imtcom::IConnectionStatusProvider::ConnectionStatus> m_senderLoginStatusMap;
134 mutable QReadWriteLock m_sendersLock;
136 I_REF(imtrest::IRequestServlet, m_requestServerHandlerCompPtr);
137 I_REF(imtrest::IRequestServlet, m_requestClientHandlerCompPtr);
140 I_ATTR(
bool, m_startServerOnCreateAttrPtr);
142 I_REF(iprm::IParamsSet, m_sslConfigurationCompPtr);
143 I_REF(imod::IModel, m_sslConfigurationModelCompPtr);
144 I_REF(imtcom::ISslConfigurationManager, m_sslConfigurationManagerCompPtr);
146 I_ATTR(QByteArray, m_productId);
147 I_REF(iprm::IOptionsList, m_subprotocolListCompPtr);
149 bool m_isInitialized =
false;
Interface for monitoring network connection status with observable state changes.
ConnectionStatus
Connection status enumeration.
Interface for describing server connection configuration with multi-protocol support.