You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
4.1 KiB
C++
128 lines
4.1 KiB
C++
//#pragma execution_character_set("utf-8")
|
|
|
|
#include "applive.h"
|
|
#include "qmutex.h"
|
|
#include "qudpsocket.h"
|
|
#include "qtcpsocket.h"
|
|
#include "qstringlist.h"
|
|
#include "qapplication.h"
|
|
#include "qdatetime.h"
|
|
#include "qdebug.h"
|
|
#include "QDebug"
|
|
#define TIMEMS qPrintable(QTime::currentTime().toString("HH:mm:ss zzz"))
|
|
|
|
QScopedPointer<AppLive> AppLive::self;
|
|
AppLive *AppLive::Instance()
|
|
{
|
|
if (self.isNull()) {
|
|
QMutex mutex;
|
|
QMutexLocker locker(&mutex);
|
|
if (self.isNull()) {
|
|
self.reset(new AppLive);
|
|
}
|
|
}
|
|
|
|
return self.data();
|
|
}
|
|
|
|
AppLive::AppLive(QObject *parent) : QObject(parent)
|
|
{
|
|
qDebug() <<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$";
|
|
qDebug() <<"$ Module: Livedemo";
|
|
qDebug() <<"$ Date:" <<__DATE__;
|
|
qDebug() <<"$ Time:" <<__TIME__;
|
|
qDebug() <<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$";
|
|
//udpServer = new QUdpSocket(this);//QUdpSocket(this);
|
|
|
|
tcpServer = new QTcpSocket(this);//QUdpSocket(this);
|
|
|
|
QString name = qApp->applicationFilePath();
|
|
QStringList list = name.split("/");
|
|
appName = list.at(list.count() - 1).split(".").at(0);
|
|
}
|
|
AppLive::~AppLive()
|
|
{
|
|
;
|
|
}
|
|
|
|
void AppLive::readData()
|
|
{
|
|
QByteArray byteArrays =tcpServer->readAll();
|
|
qDebug() <<"TcpServerLib::readyRead =" <<byteArrays;
|
|
QList<QByteArray> byteArrayList =byteArrays.split('\n');
|
|
|
|
foreach (QByteArray byteArray, byteArrayList) {
|
|
if(byteArray.isEmpty())
|
|
continue;
|
|
// QJsonArray appIdJsonArray;
|
|
// QJsonValue infos;
|
|
// QString key;
|
|
// SubAppTcpSocket::AppId fromId =SubAppTcpSocket::getInform(byteArray,
|
|
// appIdJsonArray,
|
|
// key, infos);
|
|
QString data = QLatin1String(byteArray);
|
|
|
|
qDebug() <<"RXD =" <<data;
|
|
if (data == "Hello") {
|
|
tcpServer->write(QByteArray("OK\r\n").append(qApp->applicationName()));//往守护进程发程序名
|
|
}
|
|
// qDebug() <<"key =" <<key;
|
|
// qDebug() <<"appIdJsonArray =" <<appIdJsonArray;
|
|
// qDebug() <<"infos =" <<infos;
|
|
// foreach (ProcessObject* processObject, processObjectList) {
|
|
// if(processObject->appId ==fromId) {
|
|
// if(!processObject->tcpSocket) {
|
|
// processObject->tcpSocket =tcpSocket;
|
|
// }
|
|
// processObject->timeout =0;
|
|
// }
|
|
// else if(appIdJsonArray.contains((int)processObject->appId)
|
|
// &&processObject->tcpSocket) {
|
|
// processObject->tcpSocket->write(byteArray.append('\n'));
|
|
// }
|
|
// }
|
|
}
|
|
// QByteArray tempData;
|
|
|
|
// do {
|
|
// tempData.resize(udpServer->pendingDatagramSize());
|
|
// QHostAddress sender;
|
|
// quint16 senderPort;
|
|
// udpServer->readDatagram(tempData.data(), tempData.size(), &sender, &senderPort);
|
|
// QString data = QLatin1String(tempData);
|
|
|
|
// if (data == "hello") {
|
|
// udpServer->writeDatagram(QString("%1OK").arg(appName).toLatin1(), sender, senderPort);
|
|
// }
|
|
// } while (udpServer->hasPendingDatagrams());
|
|
}
|
|
|
|
bool AppLive::start(int port)
|
|
{
|
|
// bool ok = udpServer->bind(port);
|
|
// if (ok) {
|
|
// connect(udpServer, SIGNAL(readyRead()), this, SLOT(readData()));
|
|
// qDebug() << TIMEMS << "Start AppLive Ok";
|
|
// }
|
|
// bool ok = tcpServer->bind(port);
|
|
// if (ok) {
|
|
// connect(tcpServer, SIGNAL(readyRead()), this, SLOT(readData()));
|
|
// qDebug() << TIMEMS << "Start AppLive Ok";
|
|
// }
|
|
bool ok = true;//tcpServer->bind(44555);
|
|
if (ok) {
|
|
connect(tcpServer, SIGNAL(readyRead()), this, SLOT(readData()));
|
|
tcpServer->connectToHost(QString("127.0.0.1"),port);
|
|
qDebug() << TIMEMS << "Start AppLive Ok";
|
|
}
|
|
return ok;
|
|
}
|
|
|
|
void AppLive::stop()
|
|
{
|
|
// udpServer->abort();
|
|
// disconnect(udpServer, SIGNAL(readyRead()), this, SLOT(readData()));
|
|
tcpServer->abort();
|
|
disconnect(tcpServer, SIGNAL(readyRead()), this, SLOT(readData()));
|
|
}
|