[59] | 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"
|
---|
[99] | 17 | //#include "SeptentrioComponent.h"
|
---|
[59] | 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 | }
|
---|