1 | /*********************************************************************
|
---|
2 | // created: 2008/07/18 - 15:33
|
---|
3 | // filename: SeptentrioSocket.cpp
|
---|
4 | //
|
---|
5 | // author: Gerald Dherbomez
|
---|
6 | // Copyright Heudiasyc UMR UTC/CNRS 6599
|
---|
7 | //
|
---|
8 | // version: $Id: $
|
---|
9 | //
|
---|
10 | // purpose: Management of the TCP/IP connection with the Septentrio
|
---|
11 | // receiver.
|
---|
12 | *********************************************************************/
|
---|
13 |
|
---|
14 |
|
---|
15 |
|
---|
16 | #include "SeptentrioSocket.h"
|
---|
17 | #include "SeptentrioComponent.h"
|
---|
18 | #include <QApplication>
|
---|
19 | #include <QtDebug>
|
---|
20 |
|
---|
21 |
|
---|
22 |
|
---|
23 | //////////////////////////////////////////////////////////////////////////
|
---|
24 | // Constructor
|
---|
25 | //////////////////////////////////////////////////////////////////////////
|
---|
26 | SeptentrioSocket::SeptentrioSocket() : sem(MAX_RESOURCES_COUNT)
|
---|
27 | {
|
---|
28 | sem.acquire(MAX_RESOURCES_COUNT);
|
---|
29 | socket_ = new QTcpSocket(this);
|
---|
30 | connect( socket_, SIGNAL(connected()), this,SLOT(socketConnected()) );
|
---|
31 | connect( socket_, SIGNAL(disconnected()),this, SLOT(socketConnectionClosed()) );
|
---|
32 | connect( socket_, SIGNAL(readyRead()),this, SLOT(socketReadyRead()) );
|
---|
33 | connect( socket_, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(socketError(QAbstractSocket::SocketError)) );
|
---|
34 | }
|
---|
35 |
|
---|
36 |
|
---|
37 |
|
---|
38 | //////////////////////////////////////////////////////////////////////////
|
---|
39 | // Destructor
|
---|
40 | //////////////////////////////////////////////////////////////////////////
|
---|
41 | SeptentrioSocket::~SeptentrioSocket()
|
---|
42 | {
|
---|
43 | delete socket_;
|
---|
44 | }
|
---|
45 |
|
---|
46 |
|
---|
47 |
|
---|
48 |
|
---|
49 | //////////////////////////////////////////////////////////////////////////
|
---|
50 | // public slot
|
---|
51 | // connection to server
|
---|
52 | //////////////////////////////////////////////////////////////////////////
|
---|
53 | void SeptentrioSocket::connectToServer(QString host, int port)
|
---|
54 | {
|
---|
55 | qDebug("trying to connect to server");
|
---|
56 | socket_->connectToHost(host,port);
|
---|
57 | }
|
---|
58 |
|
---|
59 |
|
---|
60 |
|
---|
61 |
|
---|
62 | //////////////////////////////////////////////////////////////////////////
|
---|
63 | // protected slot
|
---|
64 | //////////////////////////////////////////////////////////////////////////
|
---|
65 | int SeptentrioSocket::socketConnected()
|
---|
66 | {
|
---|
67 | qDebug() << "we are connected to the server " << socket_->peerName().toLatin1()
|
---|
68 | << " at the port " << socket_->peerPort() << " via the socket " << socket_->socketDescriptor();
|
---|
69 |
|
---|
70 | // request data as soon as we are connected
|
---|
71 | // sendToServer("sso curr all\n");
|
---|
72 |
|
---|
73 | return 1;
|
---|
74 | }
|
---|
75 |
|
---|
76 |
|
---|
77 |
|
---|
78 |
|
---|
79 |
|
---|
80 | //////////////////////////////////////////////////////////////////////////
|
---|
81 | // protected slot
|
---|
82 | //////////////////////////////////////////////////////////////////////////
|
---|
83 | void SeptentrioSocket::socketConnectionClosed()
|
---|
84 | {
|
---|
85 | qDebug("the connection was closed");
|
---|
86 | }
|
---|
87 |
|
---|
88 |
|
---|
89 |
|
---|
90 |
|
---|
91 | //////////////////////////////////////////////////////////////////////////
|
---|
92 | // protected slot
|
---|
93 | // new incoming data to read
|
---|
94 | //////////////////////////////////////////////////////////////////////////
|
---|
95 | void SeptentrioSocket::socketReadyRead()
|
---|
96 | {
|
---|
97 | SbfFrame frame;
|
---|
98 | frame.time = road_time();
|
---|
99 | if ( socket_->bytesAvailable() <= SBFBLOCK_MAX_LENGTH)
|
---|
100 | {
|
---|
101 | frame.size = socket_->bytesAvailable();
|
---|
102 | // printf("received = %d\n",frame.size);
|
---|
103 | }
|
---|
104 | else
|
---|
105 | {
|
---|
106 | qDebug() << "Problem with SeptentrioSocket: size of data exceeds maximal capacity of "<< SBFBLOCK_MAX_LENGTH << " bytes. \nData will be ignored !";
|
---|
107 | socket_->readAll();
|
---|
108 | }
|
---|
109 | frame.size = socket_->read( (char*)&(frame.data), frame.size );
|
---|
110 | sbfFrames.push(frame);
|
---|
111 | sem.release();
|
---|
112 | }
|
---|
113 |
|
---|
114 |
|
---|
115 | //////////////////////////////////////////////////////////////////////////
|
---|
116 | // protected slot
|
---|
117 | //////////////////////////////////////////////////////////////////////////
|
---|
118 | void SeptentrioSocket::socketError( QAbstractSocket::SocketError e )
|
---|
119 | {
|
---|
120 | qWarning("socket error number %d",e);
|
---|
121 | }
|
---|
122 |
|
---|
123 |
|
---|
124 |
|
---|
125 | //////////////////////////////////////////////////////////////////////////
|
---|
126 | // Send data to server via a text stream
|
---|
127 | //////////////////////////////////////////////////////////////////////////
|
---|
128 | void SeptentrioSocket::sendToServer(QString data)
|
---|
129 | {
|
---|
130 | mutex_.lock();
|
---|
131 | QTextStream os(socket_);
|
---|
132 | os << data << endl;
|
---|
133 | mutex_.unlock();
|
---|
134 | qDebug() << "data sent to server: " << data.toLatin1();
|
---|
135 | }
|
---|