diff options
Diffstat (limited to 'src/network/socket/qnativesocketengine_winrt_p.h')
-rw-r--r-- | src/network/socket/qnativesocketengine_winrt_p.h | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/network/socket/qnativesocketengine_winrt_p.h b/src/network/socket/qnativesocketengine_winrt_p.h index 822d1fd513..085704275c 100644 --- a/src/network/socket/qnativesocketengine_winrt_p.h +++ b/src/network/socket/qnativesocketengine_winrt_p.h @@ -50,9 +50,12 @@ // // We mean it. // + +#include <QtNetwork/private/qtnetworkglobal_p.h> #include <QtCore/QEventLoop> #include <QtCore/QBuffer> #include <QtCore/QMutex> +#include <QtCore/QAtomicInteger> #include "QtNetwork/qhostaddress.h" #include "private/qabstractsocketengine_p.h" #include <wrl.h> @@ -61,6 +64,7 @@ QT_BEGIN_NAMESPACE class QNativeSocketEnginePrivate; +class SocketEngineWorker; struct WinRtDatagram { QByteArray data; @@ -135,11 +139,15 @@ signals: void connectionReady(); void readReady(); void writeReady(); + void newDatagramReceived(const WinRtDatagram &datagram); private slots: void establishRead(); + void handleNewDatagrams(const QList<WinRtDatagram> &datagram); private: + Q_INVOKABLE void putIntoPendingDatagramsList(const QList<WinRtDatagram> &datagrams); + Q_DECLARE_PRIVATE(QNativeSocketEngine) Q_DISABLE_COPY(QNativeSocketEngine) }; @@ -152,6 +160,7 @@ public: ~QNativeSocketEnginePrivate(); qintptr socketDescriptor; + SocketEngineWorker *worker; bool notifyOnRead, notifyOnWrite, notifyOnException; QAtomicInt closingDown; @@ -205,7 +214,9 @@ private: { return reinterpret_cast<ABI::Windows::Networking::Sockets::IDatagramSocket *>(socketDescriptor); } Microsoft::WRL::ComPtr<ABI::Windows::Networking::Sockets::IStreamSocketListener> tcpListener; Microsoft::WRL::ComPtr<ABI::Windows::Foundation::IAsyncAction> connectOp; - Microsoft::WRL::ComPtr<ABI::Windows::Foundation::IAsyncOperationWithProgress<ABI::Windows::Storage::Streams::IBuffer *, UINT32>> readOp; + + // Protected by readOperationsMutex. Written in handleReadyRead (native callback) + QVector<Microsoft::WRL::ComPtr<ABI::Windows::Foundation::IAsyncOperationWithProgress<ABI::Windows::Storage::Streams::IBuffer *, UINT32>>> pendingReadOps; // Protected by readMutex. Written in handleReadyRead (native callback) QBuffer readBytes; @@ -215,6 +226,12 @@ private: // handleNewDatagrams/putIntoPendingDatagramsList) mutable QMutex readMutex; + // As pendingReadOps is changed inside handleReadyRead(native callback) it has to be protected + QMutex readOperationsMutex; + + // Protected by readMutex. Written in handleReadyRead (native callback) + QAtomicInteger<int> bytesAvailable; + // Protected by readMutex. Written in handleNewDatagrams/putIntoPendingDatagramsList QList<WinRtDatagram> pendingDatagrams; @@ -234,4 +251,6 @@ private: QT_END_NAMESPACE +Q_DECLARE_METATYPE(WinRtDatagram) + #endif // QNATIVESOCKETENGINE_WINRT_P_H |