Added json broadcasting
This commit is contained in:
76
src/iomuliplexer.cpp
Normal file
76
src/iomuliplexer.cpp
Normal file
@ -0,0 +1,76 @@
|
||||
#include "iomuliplexer.h"
|
||||
#include<QDebug>
|
||||
|
||||
VirutalIODevice::VirutalIODevice(QObject* parent): QBuffer(parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
qint64 VirutalIODevice::writeData(const char *data, qint64 len)
|
||||
{
|
||||
blockSignals(true);
|
||||
qint64 ret = QBuffer::writeData(data, len);
|
||||
blockSignals(false);
|
||||
masterReadyRead();
|
||||
return ret;
|
||||
}
|
||||
|
||||
qint64 VirutalIODevice::masterWrite(const QByteArray &byteArray)
|
||||
{
|
||||
return masterWrite(byteArray.data(), byteArray.length());
|
||||
}
|
||||
|
||||
qint64 VirutalIODevice::masterWrite(const char *data, qint64 maxSize)
|
||||
{
|
||||
blockSignals(true);
|
||||
qint64 ret = QBuffer::writeData(data, maxSize);
|
||||
blockSignals(false);
|
||||
readyRead();
|
||||
return ret;
|
||||
}
|
||||
|
||||
IoMuliplexer::IoMuliplexer(QIODevice* mainDevice, QObject* Parent): IoMuliplexer(Parent)
|
||||
{
|
||||
setIoDevice(mainDevice);
|
||||
}
|
||||
|
||||
IoMuliplexer::IoMuliplexer(QObject* Parent): QObject(Parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
IoMuliplexer::~IoMuliplexer()
|
||||
{
|
||||
for(size_t i = 0; i < ioDevices_.size(); ++i) delete ioDevices_[i];
|
||||
ioDevices_.clear();
|
||||
}
|
||||
|
||||
void IoMuliplexer::setIoDevice(QIODevice* mainDevice)
|
||||
{
|
||||
mainDevice_ = mainDevice;
|
||||
connect(mainDevice_, &QIODevice::readyRead, this, &IoMuliplexer::mainIsReadyRead);
|
||||
}
|
||||
|
||||
QIODevice* IoMuliplexer::getIoDevice()
|
||||
{
|
||||
ioDevices_.push_back(new VirutalIODevice);
|
||||
ioDevices_.back()->open(QIODevice::ReadWrite);
|
||||
connect(ioDevices_.back(), &VirutalIODevice::masterReadyRead, this, &IoMuliplexer::clientIsReadyRead);
|
||||
return ioDevices_.back();
|
||||
}
|
||||
|
||||
void IoMuliplexer::clientIsReadyRead()
|
||||
{
|
||||
VirutalIODevice* device = dynamic_cast<VirutalIODevice*>(sender());
|
||||
if(device)
|
||||
{
|
||||
QByteArray array = device->readAll();
|
||||
mainDevice_->write(array);
|
||||
}
|
||||
}
|
||||
|
||||
void IoMuliplexer::mainIsReadyRead()
|
||||
{
|
||||
QByteArray array = mainDevice_->readAll();
|
||||
for(size_t i = 0; i < ioDevices_.size(); ++i) ioDevices_[i]->masterWrite(array);
|
||||
}
|
Reference in New Issue
Block a user