sensorfw
socketreader.h
Go to the documentation of this file.
1
27#ifndef SOCKETREADER_H
28#define SOCKETREADER_H
29
30#include <QObject>
31#include <QLocalSocket>
32#include <QVector>
33
41class SocketReader : public QObject
42{
43 Q_OBJECT
44 Q_DISABLE_COPY(SocketReader)
45
46public:
47
53 SocketReader(QObject* parent = 0);
54
59
66 bool initiateConnection(int sessionId);
67
73
80 QLocalSocket* socket();
81
92 bool read(void* buffer, int size);
93
102 template<typename T>
103 bool read(QVector<T>& values);
104
111
112private:
117 static const char* channelIDString;
118
122 bool readSocketTag();
123
124 QLocalSocket* socket_;
125 bool tagRead_;
126};
127
128template<typename T>
129bool SocketReader::read(QVector<T>& values)
130{
131 if (!socket_) {
132 return false;
133 }
134
135 unsigned int count;
136 if(!read((void*)&count, sizeof(unsigned int)))
137 {
138 socket_->readAll();
139 return false;
140 }
141 if(count > 1000)
142 {
143 qWarning() << "Too many samples waiting in socket. Flushing it to empty";
144 socket_->readAll();
145 return false;
146 }
147 values.resize(values.size() + count);
148 if(!read((void*)values.data(), sizeof(T) * count))
149 {
150 qWarning() << "Error occured while reading data from socket: " << socket_->errorString();
151 socket_->readAll();
152 return false;
153 }
154 return true;
155}
156
157#endif // SOCKETREADER_H
Helper class for reading socket datachannel from sensord.
Definition: socketreader.h:42
SocketReader(QObject *parent=0)
Constructor.
~SocketReader()
Destructor.
bool dropConnection()
Drops socket connection.
bool isConnected()
Returns whether the socket is currently connected.
bool initiateConnection(int sessionId)
Initiates new data socket connection.
QLocalSocket * socket()
Provides access to the internal QLocalSocket for direct reading.
bool read(void *buffer, int size)
Attempt to read given number of bytes from the socket.