Projekt

Obecné

Profil

Stáhnout (2.72 KB) Statistiky
| Větev: | Tag: | Revize:
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

    
28
}
29

    
30
void CurveDataServer::onSocketStateChanged(QAbstractSocket::SocketState socketState)
31
{
32
    if (socketState == QAbstractSocket::UnconnectedState)
33
    {
34
        QTcpSocket* sender = static_cast<QTcpSocket*>(QObject::sender());
35
        _sockets.removeOne(sender);
36
    }
37
}
38

    
39
void CurveDataServer::onReadyRead()
40
{
41
    // tady actually nakonec switch zpracovani ruznych zprav dle identifikatoru
42
    QTcpSocket* sender = static_cast<QTcpSocket*>(QObject::sender());
43
    QByteArray data = sender->readAll();
44
    for (QTcpSocket* socket : _sockets) {
45
        if (socket != sender)
46
            socket->write(QByteArray::fromStdString(sender->peerAddress().toString().toStdString() + ": " + data.toStdString()));
47
    }
48
}
49

    
50
QByteArray *CurveDataServer::createMessageId(int sizeId, int typeId)
51
{
52
    QByteArray *id = new QByteArray();
53

    
54
    id->append((sizeId & 0x0F) << 4 + ((typeId & 0x0F00) >> 12));
55
    id->append(typeId & 0xFF);
56

    
57
    return id;
58
}
59
/*
60
QByteArray *CurveDataServer::appendFloatToMessage(QByteArray *message, float f)
61
{
62
    if (!message)
63
        return message;
64

    
65
    unsigned char *c = reinterpret_cast<unsigned char *>(&f);
66

    
67
    for (int i = 0; i < 4; i++)
68
    {
69
        message->append(c[3 - i]);
70
    }
71

    
72
    return message;
73
}
74
*/
75
QByteArray *CurveDataServer::putFloatIntoMessage(QByteArray *message, int index, float f)
76
{
77
    if (!message || message->size() < index + 4)
78
        return message;
79

    
80
    unsigned char *c = reinterpret_cast<unsigned char *>(&f);
81

    
82
    for (int i = 0; i < 4; i++)
83
    {
84
        (*message)[index + i] = c[i];
85
    }
86

    
87
    return message;
88
}
89

    
90

    
91
void CurveDataServer::sendApplicatorPoint(float x, float y, float z)
92
{
93
    QByteArray message(18, 0);
94
    message[0] = 0x03;
95
    message[1] = 0x40;
96

    
97
    putFloatIntoMessage(&message, 2, x);
98
    putFloatIntoMessage(&message, 6, y);
99
    putFloatIntoMessage(&message, 10, z);
100
    putFloatIntoMessage(&message, 14, 0.0);
101

    
102
    for (QTcpSocket* socket : _sockets) {
103
            socket->write(message);
104
    }
105
    qDebug() << message.toHex();
106
    qDebug() << x << " " << y << " " << z;
107
}
(2-2/19)