-
UID:110085
-
- 注册时间2010-12-21
- 最后登录2024-04-26
- 在线时间3538小时
-
- 发帖2742
- 搜Ta的帖子
- 精华2
- 金钱32733
- 威望3371
- 贡献值589
- 好评度3389
-
访问TA的空间加好友用道具
|
widget编写,将抓拍的照片发给服务器 执行人脸识别和比对,比对成功后选择被访人的楼号单元层号房号电话,打通电话,被访人按下确认键,收到后制作人脸通行证,将该访客的人脸信息发送至对应单元下的人脸实时分析设备,访客直接过去自动开门,超时失效。 - #ifndef DEVICECLIENT_H
- #define DEVICECLIENT_H
- #include <QtNetwork>
- class DeviceClient : public QObject
- {
- Q_OBJECT
- public:
- static DeviceClient *Instance();
- explicit DeviceClient(QObject *parent = 0);
- private:
- static DeviceClient *self;
- QMutex mutex;
- bool isOk;
- QDateTime lastTime;
- QString serverIP;
- int serverPort;
- QTcpSocket *tcpSocket;
- QByteArray buffer;
- private slots:
- void connected();
- void disconnected();
- void checkConn();
- void readData();
- void checkData();
- signals:
- void sendData(const QString &ip, const QString &data);
- void receiveData(const QString &ip, const QString &data);
- void receiveFaceFail();
- void receiveFace(const QRect &rect);
- void callFinsh();
- void callError();
- void receiveCall(const QString &tel);
- void receiveKey(const QString &key);
- public slots:
- void setServerIP(const QString &serverIP);
- void setServerPort(int serverPort);
- bool start();
- void sendData(const QString &buffer);
- void sendHeart();
- void sendImage(const QImage &image);
- void sendAction(const QString &tel, bool call = true);
- void sendPersonInfo(const QString &personBuild,
- const QString &personUnit,
- const QString &personLevel,
- const QString &personRoom,
- const QString &personName,
- const QString &personType,
- const QString &startTime,
- const QString &endTime);
- };
- #endif // DEVICECLIENT_H
- #include "deviceclient.h"
- #include "quiwidget.h"
- #include "devicefun.h"
- #include "qandroid.h"
- #include "dbdata.h"
- DeviceClient *DeviceClient::self = 0;
- DeviceClient *DeviceClient::Instance()
- {
- if (!self) {
- QMutex mutex;
- QMutexLocker locker(&mutex);
- if (!self) {
- self = new DeviceClient;
- }
- }
- return self;
- }
- DeviceClient::DeviceClient(QObject *parent) : QObject(parent)
- {
- isOk = false;
- lastTime = QDateTime::currentDateTime();
- serverIP = "192.168.1.239";
- serverPort = 6661;
- //实例化连接对象
- tcpSocket = new QTcpSocket(this);
- connect(tcpSocket, SIGNAL(connected()), this, SLOT(connected()));
- connect(tcpSocket, SIGNAL(disconnected()), this, SLOT(disconnected()));
- connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(readData()));
- //定时器处理数据
- QTimer *timer = new QTimer(this);
- connect(timer, SIGNAL(timeout()), this, SLOT(checkData()));
- timer->start(100);
- //定时器处理重连
- QTimer *timerConn = new QTimer(this);
- connect(timerConn, SIGNAL(timeout()), this, SLOT(checkConn()));
- timerConn->start(5000);
- //定时器发送心跳
- QTimer *timerHeart = new QTimer(this);
- connect(timerHeart, SIGNAL(timeout()), this, SLOT(sendHeart()));
- timerHeart->start(1000);
- }
- void DeviceClient::connected()
- {
- isOk = true;
- }
- void DeviceClient::disconnected()
- {
- isOk = false;
- }
- void DeviceClient::checkConn()
- {
- QDateTime now = QDateTime::currentDateTime();
- int timeout = lastTime.secsTo(now);
- if (timeout >= 10) {
- isOk = false;
- QAndroid::Instance()->makeToast("重新连接服务器");
- start();
- }
- }
- void DeviceClient::readData()
- {
- lastTime = QDateTime::currentDateTime();
- QMutexLocker locker(&mutex);
- buffer.append(tcpSocket->readAll());
- }
- void DeviceClient::checkData()
- {
- QMutexLocker locker(&mutex);
- QDomDocument dom;
- if (!DeviceFun::getReceiveXmlData(buffer, dom)) {
- return;
- }
- QDomElement element = dom.documentElement();
- if (element.tagName() == "Server") {
- QString nowTime = element.attribute("NowTime");
- QString year = nowTime.mid(0, 4);
- QString month = nowTime.mid(5, 2);
- QString day = nowTime.mid(8, 2);
- QString hour = nowTime.mid(11, 2);
- QString min = nowTime.mid(14, 2);
- QString sec = nowTime.mid(17, 2);
- QUIHelper::setSystemDateTime(year, month, day, hour, min, sec);
- //根据子节点处理
- QDomNode childNode = element.firstChild();
- QString name = childNode.nodeName();
- QString value = element.text();
- //qInfo() << TIMEMS << name << value;
- if (name == "OK") {
- } else if (name == "FaceRect") {
- QStringList list = value.split(",");
- if (list.count() == 4) {
- emit receiveFace(QRect(list.at(0).toInt(), list.at(1).toInt(), list.at(2).toInt(), list.at(3).toInt()));
- } else {
- emit receiveFaceFail();
- }
- } else if (name == "ActionResult") {
- if (value.startsWith("CallFinsh")) {
- emit callFinsh();
- QAndroid::Instance()->makeToast("呼叫结束");
- } else if (value.startsWith("CallError")) {
- emit callError();
- QAndroid::Instance()->makeToast("呼叫失败");
- } else if (value.startsWith("ReceiveCall")) {
- emit receiveCall(value.split(":").at(1));
- QAndroid::Instance()->makeToast("新电话打入");
- } else if (value.startsWith("ReceiveKey")) {
- emit receiveKey(value.split(":").at(1));
- QAndroid::Instance()->makeToast("按键确认");
- //立即发送访客信息
- QDateTime now = QDateTime::currentDateTime();
- QString endTime = now.addSecs(App::Timeout * 60 * 60).toString("yyyy-MM-dd HH:mm:ss");
- sendPersonInfo(DBData::PersonBuild,
- DBData::PersonUnit,
- DBData::PersonLevel,
- DBData::PersonRoom,
- DBData::PersonName,
- "访客", DATETIME, endTime);
- }
- }
- }
- }
- void DeviceClient::setServerIP(const QString &serverIP)
- {
- this->serverIP = serverIP;
- }
- void DeviceClient::setServerPort(int serverPort)
- {
- this->serverPort = serverPort;
- }
- bool DeviceClient::start()
- {
- tcpSocket->abort();
- tcpSocket->connectToHost(serverIP, serverPort);
- }
- void DeviceClient::sendData(const QString &buffer)
- {
- if (!isOk) {
- return;
- }
- tcpSocket->write(buffer.toLatin1());
- emit sendData(App::LocalIP, buffer);
- if (buffer.contains("PersonInfo")) {
- qInfo() << buffer;
- }
- }
- void DeviceClient::sendHeart()
- {
- //构建xml字符串
- QStringList list;
- list.append(QString("<Device DeviceIP=\"%1\">").arg(App::LocalIP));
- list.append("<DeviceHeart/>");
- list.append("</Device>");
- QString buffer = DeviceFun::getSendXmlData(list.join(""));
- sendData(buffer);
- }
- void DeviceClient::sendImage(const QImage &image)
- {
- QByteArray imageData = DeviceFun::getImageData(image);
- //构建xml字符串
- QStringList list;
- list.append(QString("<Device DeviceIP=\"%1\">").arg(App::LocalIP));
- list.append(QString("<Image>%1</Image>").arg(QString(imageData)));
- list.append("</Device>");
- QString buffer = DeviceFun::getSendXmlData(list.join(""));
- sendData(buffer);
- }
- void DeviceClient::sendAction(const QString &tel, bool call)
- {
- //构建xml字符串
- QStringList list;
- list.append(QString("<Device DeviceIP=\"%1\">").arg(App::LocalIP));
- if (call) {
- list.append(QString("<DoAction>StartCall:%1</DoAction>").arg(tel));
- } else {
- list.append(QString("<DoAction>StopCall</DoAction>"));
- }
- list.append("</Device>");
- QString buffer = DeviceFun::getSendXmlData(list.join(""));
- sendData(buffer);
- }
- void DeviceClient::sendPersonInfo(const QString &personBuild,
- const QString &personUnit,
- const QString &personLevel,
- const QString &personRoom,
- const QString &personName,
- const QString &personType,
- const QString &startTime,
- const QString &endTime)
- {
- //构建xml字符串
- QStringList list;
- list.append(QString("<Device DeviceIP=\"%1\">").arg(App::LocalIP));
- list.append("<PersonInfo>");
- list.append(QString("<PersonBuild>%1</PersonBuild>").arg(DeviceFun::getBase64(personBuild)));
- list.append(QString("<PersonUnit>%1</PersonUnit>").arg(DeviceFun::getBase64(personUnit)));
- list.append(QString("<PersonLevel>%1</PersonLevel>").arg(DeviceFun::getBase64(personLevel)));
- list.append(QString("<PersonRoom>%1</PersonRoom>").arg(DeviceFun::getBase64(personRoom)));
- list.append(QString("<PersonName>%1</PersonName>").arg(DeviceFun::getBase64(personName)));
- list.append(QString("<PersonType>%1</PersonType>").arg(DeviceFun::getBase64(personType)));
- list.append(QString("<StartTime>%1</StartTime>").arg(startTime));
- list.append(QString("<EndTime>%1</EndTime>").arg(endTime));
- list.append("</PersonInfo>");
- list.append("</Device>");
- QString buffer = DeviceFun::getSendXmlData(list.join(""));
- sendData(buffer);
- }
|