Revize 681d1a97
Přidáno uživatelem Jakub Hejman před téměř 4 roky(ů)
deltarobot/curvedataserver.cpp | ||
---|---|---|
1 |
#include "curvedataserver.h" |
|
2 |
|
|
3 |
#include <QDebug> |
|
4 |
#include <QHostAddress> |
|
5 |
#include <QAbstractSocket> |
|
6 |
|
|
7 |
CurveDataServer::CurveDataServer() : |
|
8 |
_server(this), |
|
9 |
_sockets() |
|
10 |
{ |
|
11 |
_server.listen(QHostAddress::Any, 4242); |
|
12 |
connect(&_server, SIGNAL(newConnection()), this, SLOT(onNewConnection())); |
|
13 |
} |
|
14 |
|
|
15 |
CurveDataServer::~CurveDataServer() |
|
16 |
{ |
|
17 |
// asi vlastne neni co |
|
18 |
} |
|
19 |
|
|
20 |
void CurveDataServer::onNewConnection() |
|
21 |
{ |
|
22 |
QTcpSocket *clientSocket = _server.nextPendingConnection(); |
|
23 |
connect(clientSocket, SIGNAL(readyRead()), this, SLOT(onReadyRead())); |
|
24 |
connect(clientSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(onSocketStateChanged(QAbstractSocket::SocketState))); |
|
25 |
|
|
26 |
_sockets.push_back(clientSocket); |
|
27 |
for (QTcpSocket* socket : _sockets) { |
|
28 |
socket->write(QByteArray::fromStdString(clientSocket->peerAddress().toString().toStdString() + " connected to server !\n")); |
|
29 |
} |
|
30 |
} |
|
31 |
|
|
32 |
void CurveDataServer::onSocketStateChanged(QAbstractSocket::SocketState socketState) |
|
33 |
{ |
|
34 |
if (socketState == QAbstractSocket::UnconnectedState) |
|
35 |
{ |
|
36 |
QTcpSocket* sender = static_cast<QTcpSocket*>(QObject::sender()); |
|
37 |
_sockets.removeOne(sender); |
|
38 |
} |
|
39 |
} |
|
40 |
|
|
41 |
void CurveDataServer::onReadyRead() |
|
42 |
{ |
|
43 |
// tady actually nakonec switch zpracovani ruznych zprav dle identifikatoru |
|
44 |
QTcpSocket* sender = static_cast<QTcpSocket*>(QObject::sender()); |
|
45 |
QByteArray data = sender->readAll(); |
|
46 |
for (QTcpSocket* socket : _sockets) { |
|
47 |
if (socket != sender) |
|
48 |
socket->write(QByteArray::fromStdString(sender->peerAddress().toString().toStdString() + ": " + data.toStdString())); |
|
49 |
} |
|
50 |
} |
|
51 |
|
|
52 |
QByteArray *CurveDataServer::createMessageId(int sizeId, int typeId) |
|
53 |
{ |
|
54 |
QByteArray *id = new QByteArray(); |
|
55 |
|
|
56 |
id->append((sizeId & 0x0F) << 4 + ((typeId & 0x0F00) >> 12)); |
|
57 |
id->append(typeId & 0xFF); |
|
58 |
|
|
59 |
return id; |
|
60 |
} |
|
61 |
/* |
|
62 |
QByteArray *CurveDataServer::appendFloatToMessage(QByteArray *message, float f) |
|
63 |
{ |
|
64 |
if (!message) |
|
65 |
return message; |
|
66 |
|
|
67 |
unsigned char *c = reinterpret_cast<unsigned char *>(&f); |
|
68 |
|
|
69 |
for (int i = 0; i < 4; i++) |
|
70 |
{ |
|
71 |
message->append(c[3 - i]); |
|
72 |
} |
|
73 |
|
|
74 |
return message; |
|
75 |
} |
|
76 |
*/ |
|
77 |
QByteArray *CurveDataServer::putFloatIntoMessage(QByteArray *message, int index, float f) |
|
78 |
{ |
|
79 |
if (!message || message->size() < index + 4) |
|
80 |
return message; |
|
81 |
|
|
82 |
unsigned char *c = reinterpret_cast<unsigned char *>(&f); |
|
83 |
|
|
84 |
for (int i = 0; i < 4; i++) |
|
85 |
{ |
|
86 |
(*message)[index + i] = c[i]; |
|
87 |
} |
|
88 |
|
|
89 |
return message; |
|
90 |
} |
|
91 |
|
|
92 |
|
|
93 |
void CurveDataServer::sendApplicatorPoint(float x, float y, float z) |
|
94 |
{ |
|
95 |
QByteArray message(18, 0); |
|
96 |
message[0] = 0x40; |
|
97 |
message[1] = 0x03; |
|
98 |
|
|
99 |
putFloatIntoMessage(&message, 2, x); |
|
100 |
putFloatIntoMessage(&message, 6, y); |
|
101 |
putFloatIntoMessage(&message, 10, z); |
|
102 |
putFloatIntoMessage(&message, 14, 0.0); |
|
103 |
|
|
104 |
for (QTcpSocket* socket : _sockets) { |
|
105 |
socket->write(message); |
|
106 |
} |
|
107 |
qDebug() << message.toHex(); |
|
108 |
} |
deltarobot/curvedataserver.h | ||
---|---|---|
1 |
#ifndef CURVEDATASERVER_H |
|
2 |
#define CURVEDATASERVER_H |
|
3 |
|
|
4 |
#include <QObject> |
|
5 |
#include <QTcpServer> |
|
6 |
#include <QTcpSocket> |
|
7 |
|
|
8 |
class CurveDataServer : QObject |
|
9 |
{ |
|
10 |
Q_OBJECT |
|
11 |
|
|
12 |
public: |
|
13 |
CurveDataServer(); |
|
14 |
~CurveDataServer(); |
|
15 |
void sendApplicatorPoint(float x, float y, float z); |
|
16 |
|
|
17 |
public slots: |
|
18 |
void onNewConnection(); |
|
19 |
void onSocketStateChanged(QAbstractSocket::SocketState socketState); |
|
20 |
void onReadyRead(); |
|
21 |
|
|
22 |
private: |
|
23 |
QByteArray *createMessageId(int sizeId, int typId); |
|
24 |
//QByteArray *appendFloatToMessage(QByteArray *message, float f); |
|
25 |
QByteArray *putFloatIntoMessage(QByteArray *message, int index, float f); |
|
26 |
|
|
27 |
QTcpServer _server; |
|
28 |
QList<QTcpSocket*> _sockets; |
|
29 |
}; |
|
30 |
|
|
31 |
#endif // CURVEDATASERVER_H |
deltarobot/mainwindow.cpp | ||
---|---|---|
1 | 1 |
#include "mainwindow.h" |
2 | 2 |
#include "curvedialog.h" |
3 | 3 |
#include "infodialog.h" |
4 |
#include "curvedataserver.h" |
|
4 | 5 |
#include "selectpatientdlg.h" |
5 | 6 |
#include "ui_mainwindow.h" |
6 | 7 |
#include <QModbusTcpClient> |
... | ... | |
93 | 94 |
|
94 | 95 |
MainWindow::MainWindow(QWidget *parent) : |
95 | 96 |
QMainWindow(parent), |
96 |
ui(new Ui::MainWindow) |
|
97 |
ui(new Ui::MainWindow), |
|
98 |
cdServer(new CurveDataServer) |
|
97 | 99 |
{ |
98 | 100 |
ui->setupUi(this); |
99 | 101 |
|
100 | 102 |
mbClient = new QModbusTcpClient(this); |
103 |
|
|
101 | 104 |
pendingRead = pendingWrite = lastPacket = initStep = bSpeedUpdated = false; |
102 | 105 |
calcCurvePoints[0] = calcCurvePoints[1] = staticSpherePos = spherePos = QVector3D(0,0,0); |
103 | 106 |
dirArrow = QVector3D(0,0,0); |
... | ... | |
265 | 268 |
} |
266 | 269 |
delete db; |
267 | 270 |
delete ui; |
271 |
delete cdServer; |
|
268 | 272 |
} |
269 | 273 |
|
270 | 274 |
//! Připojit/Odpojit modbus server |
... | ... | |
1067 | 1071 |
connectionGuard->restart(); |
1068 | 1072 |
} |
1069 | 1073 |
#endif |
1074 |
cdServer->sendApplicatorPoint(spherePos.x(), spherePos.y(), spherePos.z()); |
|
1070 | 1075 |
} |
1071 | 1076 |
|
1072 | 1077 |
//! Příjem dat ze stroje |
deltarobot/mainwindow.h | ||
---|---|---|
7 | 7 |
#include "QsLog.h" |
8 | 8 |
#include "../db_browser/dbaccess.h" |
9 | 9 |
|
10 |
#include "curvedataserver.h" |
|
11 |
|
|
10 | 12 |
#include <QFile> |
11 | 13 |
#include <QTextStream> |
12 | 14 |
|
... | ... | |
98 | 100 |
QModbusClient *mbClient; |
99 | 101 |
//! Databázové spojení |
100 | 102 |
dbAccess *db; |
103 |
|
|
104 |
//! TCP Server dat křivky |
|
105 |
CurveDataServer *cdServer; |
|
106 |
|
|
101 | 107 |
//! Status spojení s databází |
102 | 108 |
bool dbConnected; |
103 | 109 |
//! Proměnná obsahující info, má-li být databáze použita |
deltarobot/modbusSlave.pro | ||
---|---|---|
4 | 4 |
# |
5 | 5 |
#------------------------------------------------- |
6 | 6 |
|
7 |
QT += core gui serialbus opengl charts sql |
|
7 |
QT += core gui serialbus opengl charts sql network
|
|
8 | 8 |
|
9 | 9 |
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets |
10 | 10 |
|
... | ... | |
31 | 31 |
} |
32 | 32 |
|
33 | 33 |
SOURCES += \ |
34 |
curvedataserver.cpp \ |
|
34 | 35 |
main.cpp \ |
35 | 36 |
mainwindow.cpp \ |
36 | 37 |
curvedialog.cpp \ |
... | ... | |
46 | 47 |
selectpatientdlg.cpp |
47 | 48 |
|
48 | 49 |
HEADERS += \ |
50 |
curvedataserver.h \ |
|
49 | 51 |
mainwindow.h \ |
50 | 52 |
curvedialog.h \ |
51 | 53 |
element/arrow.hpp \ |
Také k dispozici: Unified diff
Re #8629 - Server skeleton implementation