switched from qsettings to json added editng of actors
This commit is contained in:
83
src/broadcast.cpp
Normal file
83
src/broadcast.cpp
Normal file
@ -0,0 +1,83 @@
|
||||
#include "broadcast.h"
|
||||
#include <QJsonDocument>
|
||||
#include <QDebug>
|
||||
|
||||
BroadCast::BroadCast(QIODevice* const iodevice): iodevice_(iodevice)
|
||||
{
|
||||
if(iodevice_ != nullptr) connect(iodevice_, &QIODevice::readyRead, this, &BroadCast::readyRead);
|
||||
}
|
||||
|
||||
void BroadCast::write(const char * const buffer, const size_t length)
|
||||
{
|
||||
QByteArray mBuffer("BCST: ");
|
||||
for (size_t i = 0; i < length; ++i)
|
||||
{
|
||||
if(buffer[i] != '\n' && buffer[i] != '\0') mBuffer.push_back(buffer[i]);
|
||||
else
|
||||
{
|
||||
mBuffer.push_back('\\');
|
||||
if(buffer[i] == '\n')mBuffer.push_back('n');
|
||||
else mBuffer.push_back('0');
|
||||
}
|
||||
}
|
||||
if(iodevice_)iodevice_->write(mBuffer);
|
||||
}
|
||||
|
||||
void BroadCast::write(const QByteArray& buffer)
|
||||
{
|
||||
write(buffer.data(), buffer.size());
|
||||
}
|
||||
|
||||
void BroadCast::sendJson(const QJsonObject& json)
|
||||
{
|
||||
QJsonDocument jsonDocument(json);
|
||||
write("JSON: ");
|
||||
write(jsonDocument.toJson());
|
||||
}
|
||||
|
||||
void BroadCast::decode()
|
||||
{
|
||||
if(buffer_.size() >= 6 && buffer_[0] == 'J' && buffer_[1] == 'S' && buffer_[2] == 'O' && buffer_[3] == 'N' && buffer_[4] == ':')
|
||||
{
|
||||
buffer_.remove(0,6);
|
||||
for(int i = 0; i < buffer_.size()-1; ++i)
|
||||
{
|
||||
if( buffer_[i] == '\\' && buffer_[i+1] == 'n' )
|
||||
{
|
||||
buffer_[i] = '\n';
|
||||
buffer_.remove(i+1,1);
|
||||
}
|
||||
else if( buffer_[i] == '\\' && buffer_[i+1] == '0' )
|
||||
{
|
||||
buffer_[i] = '\0';
|
||||
buffer_.remove(i+1,1);
|
||||
}
|
||||
}
|
||||
QJsonDocument document;
|
||||
QJsonParseError error;
|
||||
document.fromJson(buffer_, &error);
|
||||
if(error.error == QJsonParseError::NoError) gotJson(document.object());
|
||||
else
|
||||
{
|
||||
qDebug()<<error.errorString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BroadCast::readyRead()
|
||||
{
|
||||
buffer_.append(iodevice_->readAll());
|
||||
if(buffer_.size() >= 6)
|
||||
{
|
||||
if(buffer_[0] == 'B' && buffer_[1] == 'C' && buffer_[2] == 'S' && buffer_[3] == 'T' && buffer_[4] == ':')
|
||||
{
|
||||
if(buffer_.contains('\n'))
|
||||
{
|
||||
buffer_.remove(0,6);
|
||||
decode();
|
||||
buffer_.clear();
|
||||
}
|
||||
}
|
||||
else buffer_.clear();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user