55 lines
985 B
C++
55 lines
985 B
C++
#ifndef IOMULIPLEXER_H
|
|
#define IOMULIPLEXER_H
|
|
|
|
#include <QObject>
|
|
#include <vector>
|
|
#include <QIODevice>
|
|
#include <QBuffer>
|
|
|
|
class VirutalIODevice: public QBuffer
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
|
|
VirutalIODevice(QObject* parent = nullptr);
|
|
virtual ~VirutalIODevice() override {}
|
|
|
|
virtual qint64 writeData(const char *data, qint64 len) override;
|
|
|
|
qint64 masterWrite(const QByteArray &byteArray);
|
|
qint64 masterWrite(const char *data, qint64 maxSize);
|
|
|
|
signals:
|
|
|
|
void masterReadyRead();
|
|
|
|
};
|
|
|
|
|
|
class IoMuliplexer: public QObject
|
|
{
|
|
Q_OBJECT
|
|
private:
|
|
|
|
QIODevice* mainDevice_;
|
|
std::vector< VirutalIODevice* > ioDevices_;
|
|
|
|
public:
|
|
explicit IoMuliplexer(QIODevice* mainDevice, QObject* Parent = nullptr);
|
|
explicit IoMuliplexer(QObject* Parent = nullptr);
|
|
|
|
~IoMuliplexer();
|
|
|
|
void setIoDevice(QIODevice* mainDevice);
|
|
|
|
QIODevice* getIoDevice();
|
|
|
|
private slots:
|
|
|
|
void mainIsReadyRead();
|
|
void clientIsReadyRead();
|
|
|
|
};
|
|
|
|
#endif // IOMULIPLEXER_H
|