需求
某音响品牌需要一套完整的协议调试工具,提供给研发人员,渠道商,客户,现场人员等使用:
1.使用sqlite3数据库存储协议,
2.搜寻主机,操作主机;
3.探测云端API,调试API;
4.指令包含tcp,udp,udp组播;
5.打开pdf查看使用说明和协议;
6.隐藏功能,管理员可就调出“控制”菜单,对指令进行增改删操作;
7.支持windows系统;
Demo:某一产品线完整系列协议
设备控制指令,如下:
通过操作设备,获取云音乐(某大厂),测试该系列供应商接口是否正常:
通过操作设备,获取语言类节目,测试该系列云端供应商接口是否正常:
直接搜索主机,或者搜索指定主机的通道数量以及对应编号:
管理员使用特殊的操作,可以调出“控制”菜单,如下图:
选取指令可以增删改,如下图:
头文件源码
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include "DbServer.h" #define PDF_EXE "SumatraPDF.exe" class UdpTransfer; class QThread; class QTcpSocket; class QUdpSocket; class QLabel; class QModelIndex; class QTreeWidgetItem; class QTimer; namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: struct ChannelInfo{ ChannelInfo(){} QString roomId; QString roomName; QString devStat; }; struct HostInfo{ HostInfo(){} QString ip; QString deviceId; QString deviceName; QString deviceType; QList<ChannelInfo> listChannelInfo; }; public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); public: void init(); void sendUdpData(QByteArray); void sendTcpData(QByteArray byteArray, QString ip, quint16 port); public slots: void connected(); void disconnected(); private slots: void btn_clicked_FaSongZhiLing(); void lvw_clicked_ZhiLingJi(); void ckb_clicked_XianShiZuiXin(); void btn_clicked_ZengJiaZhiLing(); void btn_clicked_XiuGaiZhiLing(); void btn_clicked_ShanChuZhiLing(); void trw_clicked_ZhuJiLieBiao(QTreeWidgetItem* item ,int index); void btn_clicked_SouSuoZHuJi(); void btn_clicked_HuoDeZhuJiTongDao(); void cmb_changed_ZhiLingLeiXing(QString typeString); void tim_timeout(); private slots: void recvUdpData(); void recvTcpData(); void recvUdpNotify(QByteArray,QString,quint16); private slots: void on_btn_DaKaiXieYi_clicked(); void on_act_SouSuoZhuJi_triggered(); void on_act_Exit_triggered(); void on_act_HuoQuZhuJiTongDao_triggered(); void on_act_DaKaiXieYi_triggered(); void on_act_About_triggered(); void on_act_AboutQT_triggered(); void on_btn_QingKongUdp_clicked(); void on_btn_QingKongTcp_clicked(); void on_btn_QingKongUdpNotify_clicked(); private: void updateZhiLingJi(); void showList(); void updateHost(); private: QString ByteArrayToPlain(QByteArray byteArray); QString JsonToPlain(QJsonObject & jsonObject); QByteArray PlainToByteArray(QString str); protected: void keyPressEvent(QKeyEvent * event); void keyReleaseEvent(QKeyEvent * event); private: Ui::MainWindow *ui; UdpTransfer *_pUdpTransfer; QThread *_pUdpTransferThread; QHash<QString, DbServer::ZhiLingJi> _hashZhiLingJi; QString _content; QTcpSocket *_pTcpSocket; QUdpSocket *_pUdpSocket; QByteArray _tcpByteArray; QStatusBar *_pStatusBar; QLabel * _pStatusLabel1; QLabel * _pStatusLabel2; QHash<QString, HostInfo> _hashHostInfo; DbServer::ZHILINGJI_API_TYPE _type; bool _ctrl; QProcess *_pDdf; QTimer *_pTimer; }; #endif // MAINWINDOW_H