A line of communication is now created between the monitor and visualizer.
[aesalon.git] / visualizer / src / session / SessionReader.cpp
blob56b944b1cf9eb60af5c0754670e2e91ee9470630
1 #include <string.h>
3 #include "SessionReader.h"
4 #include "SessionReader.moc"
5 #include "DataTypes.h"
7 SessionReader::SessionReader(SessionIOWrapper *ioWrapper, ModuleMapper *moduleMapper)
8 : QObject(NULL), m_ioDevice(ioWrapper->ioDevice()), m_moduleMapper(moduleMapper) {
9 connect(m_ioDevice, SIGNAL(readyRead()), SLOT(readData()), Qt::QueuedConnection);
12 SessionReader::~SessionReader() {
16 void SessionReader::readData() {
17 m_unprocessed += m_ioDevice->readAll();
18 DataPacket *packet;
19 const uint32_t sourceSize = sizeof(packet->dataSource);
20 const uint32_t sizeSize = sizeof(packet->dataSize);
21 while(m_unprocessed.size() > int(sourceSize + sizeSize)) {
22 packet = new DataPacket;
23 memcpy(&packet->dataSource, m_unprocessed.data(), sourceSize);
24 memcpy(&packet->dataSize, m_unprocessed.data() + sourceSize, sizeSize);
25 if(m_unprocessed.size() < int(packet->dataSize)) {
26 delete packet;
27 break;
29 packet->data = new char[packet->dataSize];
30 memcpy(packet->data, m_unprocessed.data() + sourceSize + sizeSize, packet->dataSize);
32 m_moduleMapper->processPacket(packet);
34 m_unprocessed.remove(0, sourceSize + sizeSize + packet->dataSize);