2022-01-04 18:11:48 +08:00
|
|
|
|
#include "network.h"
|
|
|
|
|
#include <QMessageBox>
|
|
|
|
|
#include <QTime>
|
|
|
|
|
#include "string"
|
|
|
|
|
#include <QJsonObject>
|
|
|
|
|
#include <QJsonDocument>
|
2022-08-25 18:37:24 +08:00
|
|
|
|
#include <QMetaEnum>
|
|
|
|
|
#include <QNetworkDatagram>
|
2022-01-04 18:11:48 +08:00
|
|
|
|
|
2022-08-25 18:37:24 +08:00
|
|
|
|
NetComm::NetComm(QObject *p) : QObject(p) {
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
STREAM_PACKET NetComm::LedOkMakeStreamPacket(int iComType,int iLen,unsigned char *ucBuf,QString str)
|
|
|
|
|
{
|
|
|
|
|
STREAM_PACKET Temp;
|
|
|
|
|
memset(&Temp,0x00,sizeof(STREAM_PACKET));
|
|
|
|
|
if(iLen>2048)
|
|
|
|
|
return Temp;
|
|
|
|
|
memset(Temp.SyncHead,STREAM_SYNC_HEAD,STREAM_SYNC_HEAD_NUM);
|
|
|
|
|
memset(Temp.ucSerialCode,0x00,20);
|
|
|
|
|
char* ch;
|
|
|
|
|
QByteArray ba = str.toLatin1(); // must
|
|
|
|
|
ch=ba.data();
|
|
|
|
|
memcpy(Temp.ucSerialCode,ch,ba.size());
|
|
|
|
|
Temp.iLength=iLen;
|
|
|
|
|
Temp.ucCommType=iComType;
|
|
|
|
|
memcpy(Temp.pDataBuffer,ucBuf,iLen);
|
|
|
|
|
Temp.pDataBuffer[Temp.iLength]=
|
|
|
|
|
GetCheckCodeIn8(&Temp.ucCommType,Temp.iLength+sizeof(Temp.ucCommType)+sizeof(char)*20+sizeof(Temp.iLength));
|
|
|
|
|
return Temp;
|
|
|
|
|
}
|
2022-08-25 18:37:24 +08:00
|
|
|
|
void NetComm::RestoreLedCardIpByUdpCmd() {
|
2022-01-04 18:11:48 +08:00
|
|
|
|
//UDP多网卡广播
|
|
|
|
|
QList<QNetworkInterface> networkinterfaces = QNetworkInterface::allInterfaces();
|
|
|
|
|
foreach (QNetworkInterface interfaces, networkinterfaces) //networkinterfaces负责提供主机的IP地址和网络接口的列表
|
|
|
|
|
{
|
|
|
|
|
{
|
|
|
|
|
foreach (QNetworkAddressEntry entry, interfaces.addressEntries())//QNetworkAddressEntry存储了一个IP地址,子网掩码和广播地址
|
|
|
|
|
{
|
|
|
|
|
entry.setBroadcast(QHostAddress::Broadcast);
|
|
|
|
|
QHostAddress broadcastAddress("255.255.255.255");
|
|
|
|
|
{
|
|
|
|
|
entry.setBroadcast(QHostAddress::Broadcast);
|
|
|
|
|
|
|
|
|
|
RESTORE_IP stTempIp;
|
|
|
|
|
memset(&stTempIp,0x00,sizeof(RESTORE_IP));
|
|
|
|
|
|
|
|
|
|
QString strNew=entry.ip().toString();
|
|
|
|
|
int itempOffset = strNew.lastIndexOf(".");
|
|
|
|
|
QString sstrNew=strNew.left(itempOffset)+".254";
|
|
|
|
|
if(sstrNew.length()<=20)
|
|
|
|
|
memcpy(stTempIp.cNewIp,sstrNew.toLatin1().data(),sstrNew.length());
|
|
|
|
|
QString strMask=entry.netmask().toString();
|
|
|
|
|
if(strMask.length()<=20)
|
|
|
|
|
memcpy(stTempIp.cMask,strMask.toLatin1().data(),strMask.length());
|
|
|
|
|
QString strGateway=entry.ip().toString();
|
|
|
|
|
if(strGateway.length()<=20)
|
|
|
|
|
memcpy(stTempIp.cGateway,strGateway.toLatin1().data(),strGateway.length());
|
|
|
|
|
if(strGateway.length()<=20)
|
|
|
|
|
memcpy(stTempIp.cDns,strGateway.toLatin1().data(),strGateway.length());
|
|
|
|
|
STREAM_PACKET tempStreadPacket=LedOkMakeStreamPacket(COMMAND_ONLY_RESET_CARD_IP,80,(unsigned char *)&stTempIp,"Broadcast!");
|
|
|
|
|
int iLenPacket=tempStreadPacket.iLength+sizeof(int)+STREAM_SYNC_HEAD_NUM*sizeof(unsigned char)+sizeof(char)+20*sizeof(char)+sizeof(char);/////除正文外的协议结构大小;
|
|
|
|
|
QUdpSocket *tempUdpSocket= new QUdpSocket(this);
|
2022-08-25 18:37:24 +08:00
|
|
|
|
if(!tempUdpSocket->bind(entry.ip())) break;
|
|
|
|
|
tempUdpSocket->writeDatagram((char *)&tempStreadPacket,iLenPacket,broadcastAddress,m_port);
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-25 18:37:24 +08:00
|
|
|
|
void NetComm::JieXiQJsonObjectOfLedCardInfoOld(const QString &strId,const QString &strIp){
|
|
|
|
|
LedCard *pLedCard = new LedCard(this);//alahover 没有释放
|
2022-01-04 18:11:48 +08:00
|
|
|
|
pLedCard->m_strCardId=strId;
|
|
|
|
|
pLedCard->m_strCardIp=strIp;
|
2022-08-25 18:37:24 +08:00
|
|
|
|
for(int i=0;i<LedCardList.count();i++) if(LedCardList.at(i)->m_strCardId==pLedCard->m_strCardId ) {//如果已经存在在列表中
|
|
|
|
|
auto pOldLedCard = LedCardList.at(i);//获取到旧的对象指针
|
|
|
|
|
pOldLedCard->m_bOnLine = true;
|
|
|
|
|
if(pOldLedCard->CompareHTTPGetParam(pLedCard)==false) {//如果ip地址变化了
|
|
|
|
|
pOldLedCard->copyLedCardHTTPGetParam(pLedCard);
|
|
|
|
|
emit addLedCard(pOldLedCard);//发送信号到界面
|
|
|
|
|
} else {
|
|
|
|
|
//post失败的概率比较小,所以这里是否需要平凡的更新,不需要刻意屏蔽该操作改为在其他点击操作中进行
|
|
|
|
|
emit ClearHeartbeatFlagByUdp(pOldLedCard);
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|
|
|
|
|
delete pLedCard;
|
2022-08-25 18:37:24 +08:00
|
|
|
|
return;
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|
2022-08-25 18:37:24 +08:00
|
|
|
|
LedCardList.append(pLedCard);
|
|
|
|
|
emit addLedCard(pLedCard);//发送信号到界面
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
2022-08-25 18:37:24 +08:00
|
|
|
|
void NetComm::JieXiQJsonObjectOfLedCardInfo(const QJsonObject &subObj, const QString &strIp){
|
|
|
|
|
LedCard *pLedCard = new LedCard(this);//alahover 没有释放
|
2022-01-04 18:11:48 +08:00
|
|
|
|
pLedCard->m_strCardId=subObj["cardId"].toString();
|
2022-08-25 18:37:24 +08:00
|
|
|
|
if(! strIp.isEmpty()) pLedCard->m_strCardIp = strIp;
|
|
|
|
|
else {
|
|
|
|
|
pLedCard->m_strCardIp = subObj["newIp"].toString();
|
|
|
|
|
if(pLedCard->m_strCardIp.isEmpty()) pLedCard->m_strCardIp = subObj["ip"].toString();
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|
|
|
|
|
pLedCard->m_iWidth=subObj["width"].toInt();
|
|
|
|
|
pLedCard->m_iHeight=subObj["height"].toInt();
|
|
|
|
|
pLedCard->starterversionName=subObj["versionName"].toString();
|
|
|
|
|
pLedCard->starterPort=subObj["starterPort"].toInt();
|
|
|
|
|
pLedCard->androidVersion=subObj["androidVersion"].toString();
|
|
|
|
|
pLedCard->iHttpGetId=subObj["id"].toInt();
|
|
|
|
|
pLedCard->androidHeight=subObj["androidHeight"].toInt();
|
|
|
|
|
pLedCard->androidWidth=subObj["androidWidth"].toInt();
|
|
|
|
|
pLedCard->lastActive=subObj["lastActive"].toInt();
|
|
|
|
|
|
2022-08-25 18:37:24 +08:00
|
|
|
|
for(int i=0;i<LedCardList.count();i++) if(LedCardList.at(i)->m_strCardId==pLedCard->m_strCardId ) { //如果已经存在在列表中
|
|
|
|
|
auto pOldLedCard = LedCardList.at(i);//获取到旧的对象指针
|
|
|
|
|
pOldLedCard->m_bOnLine = true;
|
|
|
|
|
if(! pOldLedCard->CompareHTTPGetParam(pLedCard)) {//如果ip地址变化了
|
|
|
|
|
pOldLedCard->copyLedCardHTTPGetParam(pLedCard);
|
|
|
|
|
emit addLedCard(pOldLedCard);//发送信号到界面
|
|
|
|
|
} else {
|
|
|
|
|
//post失败的概率比较小,所以这里是否需要平凡的更新,不需要刻意屏蔽该操作改为在其他点击操作中进行
|
|
|
|
|
emit ClearHeartbeatFlagByUdp(pOldLedCard);
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|
|
|
|
|
delete pLedCard;
|
2022-08-25 18:37:24 +08:00
|
|
|
|
return;
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|
2022-08-25 18:37:24 +08:00
|
|
|
|
LedCardList.append(pLedCard);
|
|
|
|
|
emit addLedCard(pLedCard);//发送信号到界面
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|