#ifndef RESCUELOAD_H #define RESCUELOAD_H #include "qjsonarray.h" #include "qtmetamacros.h" #include #include #include #include #include /** * @brief 搜救载荷通信和数据处理 * 包含数据元素类 ImsiData: 存储搜救信息单元 * 数据模型类 ImsiTableModel: Imsi的数据容器,向表格和地图提供数据 * 载荷通信类 RescueLoad: 发送和接收数据 */ //搜救载荷移动身份识别码数据 // typedef struct class ImsiData { public: static QHash operatorMap; static QString getOperatorNameByImsi(QString imsi); public: ImsiData(){}; ImsiData(const QJsonObject& json); ImsiData(const ImsiData& from); ~ImsiData(){}; public: QString latitude; QString longitude; int altitude; // 海拔高度 QString createDate; int rssi; // 强度 QString fcn; // 频点/BAND QString imsi; QString operatorName; } /*ImsiData*/; class ImsiTableModel : public QAbstractTableModel { Q_OBJECT public: enum RoleNames { imsiRole = Qt::UserRole, latitudeRole = Qt::UserRole+2, longitudeRole = Qt::UserRole+3, altitudeRole = Qt::UserRole+4, dateRole = Qt::UserRole+5, rssiRole = Qt::UserRole+6, fcnRole = Qt::UserRole+7, operatorRole = Qt::UserRole+8, }; public: explicit ImsiTableModel(QObject *parent = nullptr); QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; void setDataMap(const QMap& dataMap ) { beginResetModel(); this->dataMap = dataMap; this->imsiList = dataMap.keys(); endResetModel(); } QMap getDataMap(){ return dataMap; } protected: // return the roles mapping to be used by QML virtual QHash roleNames() const override; private: QMap dataMap; QList imsiList; QHash m_roleNames; QStringList m_horizontalHeader; }; class RescueLoad: public QObject { Q_OBJECT public: RescueLoad(QObject *parent); ~RescueLoad(); private: QMap dataMap; // udp通信 public: void startCommunication(); // 在工作线程中运行 void sendMessage(const QString &message); void sendMessage(const QByteArray &datagram); void syncTime(); void sendNameList(const QString action, const QString type, const QList &wnamelist, const QList &bnamelist); const QMap getDataMap() const; signals: void dataUpdate(); private slots: void readData(); private: QUdpSocket* udpSocket; QString remoteIp; int remotePort; void handleMessage(const QByteArray &datagram); }; #endif // RESCUELOAD_H