2,新增“Apps”; 3,新增“Common”; 4,新增“FileList”; 5,新增“MediaX”; 6,新增“OpenSource”; 7,新增“Samples”; 8,新增“SoftwareBusinessLines”.
474 lines
12 KiB
C++
474 lines
12 KiB
C++
#include "widgetmqtt.h"
|
|
#include "ui_widgetmqtt.h"
|
|
|
|
WidgetMQTT::WidgetMQTT(QWidget* parent) :
|
|
QWidget(parent),
|
|
ui(new Ui::WidgetMQTT)
|
|
{
|
|
ui->setupUi(this);
|
|
|
|
InitWidget();
|
|
}
|
|
|
|
WidgetMQTT::~WidgetMQTT()
|
|
{
|
|
ConfigInfo* conf = ConfigInfo::GetInstance();
|
|
conf->m_strCurTopic = ui->lineEditTopic->text();
|
|
conf->m_strPubishTopic = ui->lineEditPubish->text();
|
|
conf->writeConfig();
|
|
|
|
delete ui;
|
|
}
|
|
|
|
void WidgetMQTT::InitWidget()
|
|
{
|
|
ConfigInfo* conf = ConfigInfo::GetInstance();
|
|
conf->readConfig();
|
|
conf->readConfigInfo();
|
|
|
|
m_pMqttDealer = new MqttDealer;
|
|
m_bSendHex = true;
|
|
m_bShowHex = true;
|
|
m_bSelectSub = false;
|
|
m_strReceiveShow = "";
|
|
m_bTimeSend = false;
|
|
m_iTimeCnt = 2;
|
|
m_lRecCnt = 0;
|
|
m_iSendCnt = 0;
|
|
|
|
ui->lineEditServerIP->setText(conf->m_strServerIP);
|
|
ui->lineEditServerPort->setText(conf->m_strServerPort);
|
|
ui->lineEditTopic->setText(conf->m_strCurTopic);
|
|
ui->lineEditPubish->setText(conf->m_strPubishTopic);
|
|
|
|
ui->pushButtonSubscribe->setEnabled(false);
|
|
ui->pushButtonDissubscribe->setEnabled(false);
|
|
|
|
m_listButtons.append(ui->pushButtonFunc0);
|
|
m_listButtons.append(ui->pushButtonFunc1);
|
|
m_listButtons.append(ui->pushButtonFunc2);
|
|
m_listButtons.append(ui->pushButtonFunc3);
|
|
m_listButtons.append(ui->pushButtonFunc4);
|
|
m_listButtons.append(ui->pushButtonFunc5);
|
|
m_listButtons.append(ui->pushButtonFunc6);
|
|
m_listButtons.append(ui->pushButtonFunc7);
|
|
m_listButtons.append(ui->pushButtonFunc8);
|
|
m_listButtons.append(ui->pushButtonFunc9);
|
|
m_listButtons.append(ui->pushButtonFunc10);
|
|
|
|
m_listLineEdit.append(ui->lineEditMessage0);
|
|
m_listLineEdit.append(ui->lineEditMessage1);
|
|
m_listLineEdit.append(ui->lineEditMessage2);
|
|
m_listLineEdit.append(ui->lineEditMessage3);
|
|
m_listLineEdit.append(ui->lineEditMessage4);
|
|
m_listLineEdit.append(ui->lineEditMessage5);
|
|
m_listLineEdit.append(ui->lineEditMessage6);
|
|
m_listLineEdit.append(ui->lineEditMessage7);
|
|
m_listLineEdit.append(ui->lineEditMessage8);
|
|
m_listLineEdit.append(ui->lineEditMessage9);
|
|
m_listLineEdit.append(ui->lineEditMessage10);
|
|
|
|
|
|
m_listCheckBox.append(ui->checkBox_1);
|
|
m_listCheckBox.append(ui->checkBox_2);
|
|
m_listCheckBox.append(ui->checkBox_3);
|
|
m_listCheckBox.append(ui->checkBox_4);
|
|
m_listCheckBox.append(ui->checkBox_5);
|
|
m_listCheckBox.append(ui->checkBox_6);
|
|
m_listCheckBox.append(ui->checkBox_7);
|
|
m_listCheckBox.append(ui->checkBox_8);
|
|
m_listCheckBox.append(ui->checkBox_9);
|
|
m_listCheckBox.append(ui->checkBox_10);
|
|
|
|
for (int i = 0; i < 10; i++)
|
|
{
|
|
QLineEdit* le = m_listLineEdit.at(i + 1);
|
|
le->setText(conf->m_strInfo[i]);
|
|
}
|
|
|
|
connect(m_pMqttDealer, SIGNAL(sigMQTTDisconnect()), this, SLOT(slotMQTTDisconnect()));
|
|
connect(m_pMqttDealer, SIGNAL(sigMQTTMessage(QString, QString)), this, SLOT(slotMQTTMessage(QString, QString)));
|
|
connect(m_pMqttDealer, SIGNAL(sigMQTTMessage(QString, QByteArray)), this, SLOT(slotMQTTMessage(QString, QByteArray)));
|
|
|
|
connect(ui->pushButtonConnect, SIGNAL(clicked()), this, SLOT(slotButtonDown()));
|
|
connect(ui->pushButtonSubscribe, SIGNAL(clicked()), this, SLOT(slotButtonDown()));
|
|
connect(ui->pushButtonDissubscribe, SIGNAL(clicked()), this, SLOT(slotButtonDown()));
|
|
connect(ui->pushButtonClear, SIGNAL(clicked()), this, SLOT(slotButtonDown()));
|
|
connect(ui->pushButtonTimeSend, SIGNAL(clicked()), this, SLOT(slotButtonDown()));
|
|
connect(ui->pushButtonClearSend, SIGNAL(clicked()), this, SLOT(slotButtonDown()));
|
|
|
|
|
|
connect(ui->radioButtonHex, SIGNAL(clicked()), this, SLOT(slotRadioDown()));
|
|
connect(ui->radioButtonString, SIGNAL(clicked()), this, SLOT(slotRadioDown()));
|
|
connect(ui->radioButtonHex_2, SIGNAL(clicked()), this, SLOT(slotRadioDown()));
|
|
connect(ui->radioButtonString_2, SIGNAL(clicked()), this, SLOT(slotRadioDown()));
|
|
|
|
|
|
|
|
for (int i = 0; i < 11; i++)
|
|
{
|
|
QPushButton* pb = m_listButtons.at(i);
|
|
connect(pb, SIGNAL(clicked()), this, SLOT(slotButtonDown()));
|
|
}
|
|
|
|
QTimer* timer = new QTimer(this);
|
|
connect(timer, SIGNAL(timeout()), this, SLOT(timerUpdate()));
|
|
timer->start(10);
|
|
|
|
}
|
|
|
|
void WidgetMQTT::MosConnect()
|
|
{
|
|
if (m_pMqttDealer && !m_pMqttDealer->IsOpen())
|
|
{
|
|
QString strIp = ui->lineEditServerIP->text();
|
|
QByteArray baData = strIp.toUtf8();
|
|
int nPort = ui->lineEditServerPort->text().toInt();
|
|
|
|
if (m_pMqttDealer->Open(baData.data(), nPort))
|
|
{
|
|
ui->lineEditServerIP->setEnabled(false);
|
|
ui->lineEditServerPort->setEnabled(false);
|
|
ui->pushButtonSubscribe->setEnabled(true);
|
|
ui->pushButtonDissubscribe->setEnabled(true);
|
|
ui->pushButtonConnect->setText("断开服务器");
|
|
|
|
ConfigInfo* conf = ConfigInfo::GetInstance();
|
|
conf->m_strServerIP = strIp;
|
|
conf->m_strServerPort = QString::number(nPort);
|
|
conf->writeConfig();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
DisconnectMos();
|
|
}
|
|
}
|
|
|
|
void WidgetMQTT::DisconnectMos()
|
|
{
|
|
m_pMqttDealer->Close();
|
|
|
|
m_listTopic.clear();
|
|
UpdateList();
|
|
|
|
ui->lineEditServerIP->setEnabled(true);
|
|
ui->lineEditServerPort->setEnabled(true);
|
|
ui->pushButtonSubscribe->setEnabled(false);
|
|
ui->pushButtonDissubscribe->setEnabled(false);
|
|
ui->pushButtonConnect->setText("连接服务器");
|
|
}
|
|
|
|
void WidgetMQTT::slotMQTTDisconnect()
|
|
{
|
|
DisconnectMos();
|
|
}
|
|
|
|
void WidgetMQTT::slotMQTTMessage(QString strTopic, QByteArray arrayMessage)
|
|
{
|
|
if (m_bSelectSub && ui->comboBoxSelectTopic->currentText() != strTopic)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (m_strReceiveShow != "")
|
|
{
|
|
m_strReceiveShow += "\n";
|
|
}
|
|
|
|
if (m_bShowHex)
|
|
{
|
|
m_strReceiveShow += strTopic + ":" + char2QString(arrayMessage);
|
|
}
|
|
else
|
|
{
|
|
m_strReceiveShow += strTopic + ":" + QString::fromUtf8(arrayMessage);
|
|
}
|
|
|
|
m_lRecCnt++;
|
|
}
|
|
|
|
void WidgetMQTT::slotMQTTMessage(QString strTopic, QString strMessage)
|
|
{
|
|
if (m_bSelectSub && ui->comboBoxSelectTopic->currentText() != strTopic)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (m_bShowHex)
|
|
{
|
|
m_strReceiveShow += strTopic + ":" + char2QString(strMessage.toLatin1());
|
|
}
|
|
else
|
|
{
|
|
m_strReceiveShow += strTopic + ":" + strMessage;
|
|
}
|
|
|
|
m_lRecCnt++;
|
|
}
|
|
|
|
void WidgetMQTT::UpdateList()
|
|
{
|
|
ui->comboBoxToptic->clear();
|
|
ui->comboBoxSelectTopic->clear();
|
|
foreach (QString str, m_listTopic)
|
|
{
|
|
ui->comboBoxToptic->addItem(str);
|
|
ui->comboBoxSelectTopic->addItem(str);
|
|
}
|
|
}
|
|
|
|
QByteArray WidgetMQTT::QString2Hex(QString str)
|
|
{
|
|
QByteArray senddata;
|
|
int hexdata, lowhexdata;
|
|
char lstr, hstr;
|
|
int hexdatalen = 0;
|
|
int len = str.length();
|
|
senddata.resize(len / 2);
|
|
|
|
for (int i = 0; i < len;)
|
|
{
|
|
//字符型
|
|
hstr = str[i].toLatin1();
|
|
if (hstr == ' ')
|
|
{
|
|
i++;
|
|
continue;
|
|
}
|
|
i++;
|
|
if (i >= len)
|
|
{
|
|
break;
|
|
}
|
|
lstr = str[i].toLatin1();
|
|
hexdata = convertHexChar(hstr);
|
|
lowhexdata = convertHexChar(lstr);
|
|
if ((hexdata == 16) || (lowhexdata == 16))
|
|
{
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
hexdata = hexdata * 16 + lowhexdata;
|
|
}
|
|
|
|
i++;
|
|
senddata[hexdatalen] = (char)hexdata;
|
|
|
|
hexdatalen++;
|
|
}
|
|
|
|
senddata.resize(hexdatalen);
|
|
|
|
return senddata;
|
|
}
|
|
|
|
char WidgetMQTT::convertHexChar(char ch)
|
|
{
|
|
if ((ch >= '0') && (ch <= '9'))
|
|
return ch - 0x30;
|
|
else if ((ch >= 'A') && (ch <= 'F'))
|
|
return ch - 'A' + 10;
|
|
else if ((ch >= 'a') && (ch <= 'f'))
|
|
return ch - 'a' + 10;
|
|
else
|
|
return (-1);
|
|
}
|
|
|
|
QString WidgetMQTT::char2QString(QByteArray arrayData)
|
|
{
|
|
QString strR = "";
|
|
|
|
char* cIn = arrayData.data();
|
|
for (int i = 0; i < arrayData.count(); i++)
|
|
{
|
|
char outChar = (char)cIn[i];
|
|
strR += QString("%1").
|
|
arg(outChar & 0xFF, 2, 16, QLatin1Char('0')).toUpper() + QString(" ");
|
|
}
|
|
|
|
return strR;
|
|
}
|
|
|
|
void WidgetMQTT::slotRadioDown()
|
|
{
|
|
QRadioButton* button = qobject_cast<QRadioButton*>(sender());
|
|
if (button == ui->radioButtonHex)
|
|
{
|
|
m_bSendHex = true;
|
|
}
|
|
else if (button == ui->radioButtonString)
|
|
{
|
|
m_bSendHex = false;
|
|
}
|
|
|
|
else if (button == ui->radioButtonHex_2)
|
|
{
|
|
m_bShowHex = true;
|
|
}
|
|
else if (button == ui->radioButtonString_2)
|
|
{
|
|
m_bShowHex = false;
|
|
}
|
|
}
|
|
|
|
void WidgetMQTT::timerUpdate()
|
|
{
|
|
static int s_iCnt = 0;
|
|
if (++s_iCnt % 4 == 0)
|
|
{
|
|
if (m_strReceiveShow != "")
|
|
{
|
|
ui->plainTextEdit->appendPlainText(m_strReceiveShow);
|
|
m_strReceiveShow = "";
|
|
}
|
|
|
|
ui->lineEditSendCnt->setText(QString::number(m_iSendCnt));
|
|
}
|
|
|
|
static int s_iTSend = 0;
|
|
if (m_bTimeSend && ++s_iTSend >= m_iTimeCnt)
|
|
{
|
|
s_iTSend = 0;
|
|
|
|
for (int i = 0; i < 10; i++)
|
|
{
|
|
QCheckBox* cb = m_listCheckBox.at(i);
|
|
if (cb->isChecked())
|
|
{
|
|
QPushButton* pb = m_listButtons.at(i + 1);
|
|
pb->click();
|
|
}
|
|
}
|
|
}
|
|
|
|
ui->lineEditRecCnt->setText(QString::number(m_lRecCnt));
|
|
}
|
|
|
|
void WidgetMQTT::on_checkBoxSubscribe_clicked(bool checked)
|
|
{
|
|
m_bSelectSub = checked;
|
|
|
|
ui->comboBoxSelectTopic->setEnabled(checked);
|
|
}
|
|
|
|
void WidgetMQTT::AddToptic(QString strToptic)
|
|
{
|
|
foreach (QString strT, m_listTopic)
|
|
{
|
|
if (strT == strToptic)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
m_listTopic.insert(0, strToptic);
|
|
UpdateList();
|
|
}
|
|
|
|
void WidgetMQTT::slotButtonDown()
|
|
{
|
|
QPushButton* button = qobject_cast<QPushButton*>(sender());
|
|
if (button == ui->pushButtonConnect)
|
|
{
|
|
MosConnect();
|
|
}
|
|
else if (button == ui->pushButtonSubscribe)
|
|
{
|
|
if (m_pMqttDealer->IsOpen() &&
|
|
ui->lineEditTopic->text() != "" &&
|
|
m_pMqttDealer->Subcribe(ui->lineEditTopic->text()))
|
|
{
|
|
ConfigInfo* conf = ConfigInfo::GetInstance();
|
|
conf->m_strCurTopic = ui->lineEditTopic->text();
|
|
conf->writeConfig();
|
|
|
|
AddToptic(ui->lineEditTopic->text());
|
|
UpdateList();
|
|
}
|
|
}
|
|
else if (button == ui->pushButtonDissubscribe)
|
|
{
|
|
if (m_pMqttDealer->IsOpen() &&
|
|
m_listTopic.size() > 0 &&
|
|
m_pMqttDealer->Unsubcribe(ui->comboBoxToptic->currentText()))
|
|
{
|
|
m_listTopic.removeOne(ui->comboBoxToptic->currentText());
|
|
UpdateList();
|
|
}
|
|
}
|
|
else if (button == ui->pushButtonClear)
|
|
{
|
|
ui->plainTextEdit->clear();
|
|
m_lRecCnt = 0;
|
|
}
|
|
|
|
for (int i = 0; i < 11; i++)
|
|
{
|
|
if (ui->lineEditPubish->text() == "")
|
|
{
|
|
break;
|
|
}
|
|
QPushButton* pb = m_listButtons.at(i);
|
|
if (button == pb)
|
|
{
|
|
QLineEdit* le = m_listLineEdit.at(i);
|
|
if (le->text() == "")
|
|
{
|
|
continue;
|
|
}
|
|
QString strSend = le->text();
|
|
if (m_bSendHex)
|
|
{
|
|
QString dd = le->text();
|
|
dd.replace(" ", "");
|
|
QByteArray array = QString2Hex(dd);
|
|
|
|
m_pMqttDealer->PublishDataByMQTT(
|
|
ui->lineEditPubish->text(),
|
|
array);
|
|
|
|
m_iSendCnt++;
|
|
}
|
|
else
|
|
{
|
|
m_pMqttDealer->PublishDataByMQTT(
|
|
ui->lineEditPubish->text(),
|
|
strSend);
|
|
|
|
m_iSendCnt++;
|
|
}
|
|
|
|
|
|
if (i > 0 && i < 11)
|
|
{
|
|
ConfigInfo* conf = ConfigInfo::GetInstance();
|
|
conf->m_strInfo[i - 1] = le->text();
|
|
conf->writeConfigInfo();
|
|
}
|
|
}
|
|
}
|
|
|
|
if (button == ui->pushButtonTimeSend)
|
|
{
|
|
m_bTimeSend = !m_bTimeSend;
|
|
if (m_bTimeSend)
|
|
{
|
|
int iT = ui->lineEditTimer->text().toInt() / 10;
|
|
m_iTimeCnt = iT < 1 ? 1 : iT;
|
|
ui->pushButtonTimeSend->setText("停止发送");
|
|
ui->lineEditTimer->setEnabled(false);
|
|
}
|
|
else
|
|
{
|
|
ui->pushButtonTimeSend->setText("定时发送");
|
|
ui->lineEditTimer->setEnabled(true);
|
|
}
|
|
}
|
|
if (button == ui->pushButtonClearSend)
|
|
{
|
|
m_iSendCnt = 0;
|
|
ui->lineEditSendCnt->setText(QString::number(m_iSendCnt));
|
|
}
|
|
}
|