Projekt

Obecné

Profil

Stáhnout (2.85 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
    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
}
(2-2/19)