-
Notifications
You must be signed in to change notification settings - Fork 0
/
serverconnetor.cpp
43 lines (41 loc) · 1.8 KB
/
serverconnetor.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include "serverconnetor.h"
#include "mainwindow.h"
#include <iostream>
#include <QTcpSocket>
#include <QHostAddress>
ServerConnector::ServerConnector(MainWindow *mainWindow)
: mainWindow(mainWindow) {}
void ServerConnector::connectAndSendData(float *data, unsigned short (*responeData)[Global::X_RESELUTION]) {
QTcpSocket socket;
QHostAddress hostAddress(mainWindow->getSettingsWindow()->getIpPythonServer());
if (hostAddress.isNull()) {
qDebug() << "Invalid server address" ;
return;
}
socket.connectToHost(hostAddress, mainWindow->getSettingsWindow()->getPortPythonServer());
if (!socket.waitForConnected()) {
qDebug() << "Error connecting to server" ;
return;
}
QByteArray dataArray(reinterpret_cast<const char*>(data), sizeof(float) * Global::X_RESELUTION * Global::Y_RESELUTION * 3);
socket.write(dataArray);
socket.waitForBytesWritten();
QByteArray receivedData;
int expectedSize = sizeof(unsigned short) * Global::X_RESELUTION * Global::Y_RESELUTION;
socket.waitForReadyRead(mainWindow->getSettingsWindow()->getTimeoutPythonServer());
while (receivedData.size() < expectedSize) {
// Receive response data in chunks
if (socket.waitForReadyRead(1000)) {
receivedData.append(socket.readAll());
} else {
qDebug() << "Error: Timeout waiting for additional data from the server\nRecived: " <<receivedData.size() << " / " << expectedSize << " bytes\nMissing "
<< expectedSize-receivedData.size() << " bytes";
return;
}
}
if (receivedData.size() == expectedSize) {
std::memcpy(*responeData, receivedData.constData(), expectedSize);
}else
qDebug() << "Error: Expects " << expectedSize << " bytes";
socket.disconnectFromHost();
}