@@ -62,9 +62,12 @@ class ClientSocket_Qt final : public QThread, public AbstractClientSocket{
6262 emit internal_connect (address, port);
6363 }
6464
65- virtual size_t blocking_send (const void * data, size_t bytes) override {
66- // cout << "blocking_send() - start: " << std::string((const char*)data, bytes) << endl;
65+ virtual size_t send (const void * data, size_t bytes) override {
66+ // cout << "send() - start: " << std::string((const char*)data, bytes) << endl;
67+ emit internal_send (std::string ((const char *)data, bytes));
68+ return bytes;
6769
70+ #if 0
6871 SendData send_data;
6972 send_data.data = data;
7073 send_data.total_bytes = bytes;
@@ -77,14 +80,15 @@ class ClientSocket_Qt final : public QThread, public AbstractClientSocket{
7780 return send_data.data == nullptr || m_socket == nullptr;
7881 });
7982
80- // cout << "blocking_send () - end: " << std::string((const char*)data, bytes) << endl;
83+ // cout << "send () - end: " << std::string((const char*)data, bytes) << endl;
8184 return send_data.bytes_sent;
85+ #endif
8286 }
8387
8488
8589signals:
8690 void internal_connect (const std::string& address, uint16_t port);
87- void send ( void * data );
91+ void internal_send (std::string packet );
8892
8993private:
9094 virtual void run () override {
@@ -134,6 +138,29 @@ class ClientSocket_Qt final : public QThread, public AbstractClientSocket{
134138 m_socket->connectToHost (QHostAddress (QString::fromStdString (address)), port);
135139 }
136140 );
141+ QThread::connect (
142+ this , &ClientSocket_Qt::internal_send,
143+ &socket, [this ](std::string packet){
144+ // cout << "internal_send() - enter: " << packet.data() << endl;
145+
146+ size_t bytes = packet.size ();
147+
148+ const char * ptr = (const char *)packet.data ();
149+ while (bytes > 0 && m_socket->state () == QAbstractSocket::ConnectedState){
150+ qint64 current_sent = m_socket->write (ptr, bytes);
151+ if (current_sent <= 0 ){
152+ break ;
153+ }
154+ ptr += current_sent;
155+ bytes -= current_sent;
156+ }
157+
158+ m_socket->flush ();
159+
160+ // cout << "internal_send() - exit " << endl;
161+ }
162+ );
163+ #if 0
137164 QThread::connect(
138165 this, &ClientSocket_Qt::send,
139166 &socket, [this](void* params){
@@ -165,6 +192,7 @@ class ClientSocket_Qt final : public QThread, public AbstractClientSocket{
165192// cout << "internal_send() - exit " << endl;
166193 }
167194 );
195+ #endif
168196
169197
170198 {
0 commit comments