websocketserver.cpp 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466
  1. #include "websocketserver.h"
  2. #include "QtWebSockets/qwebsocketserver.h"
  3. #include "QtWebSockets/qwebsocket.h"
  4. #include "../ytDashBoardDog/dataprecess.h"
  5. #include "infoclient.h"
  6. #include "databoardmem.h"
  7. #include "databasethread.h"
  8. WebSocketServer::WebSocketServer(QObject *parent) : QObject(parent),
  9. m_pWebSocketServer(Q_NULLPTR)
  10. {
  11. datalist.clear();
  12. count = 0;
  13. m_pWebSocketServer = new QWebSocketServer(QStringLiteral("WebSocket Server"), QWebSocketServer::NonSecureMode,this);
  14. timer = new QTimer(this);
  15. connect(timer, &QTimer::timeout, this, &WebSocketServer::timeout);
  16. connect(m_pWebSocketServer, &QWebSocketServer::newConnection, this, &WebSocketServer::onNewConnection);
  17. connect(m_pWebSocketServer, &QWebSocketServer::sslErrors, this, &WebSocketServer::onSslErrors);
  18. }
  19. WebSocketServer::~WebSocketServer()
  20. {
  21. m_pWebSocketServer->close();
  22. qDeleteAll(clientList.begin(), clientList.end());
  23. emit closed();
  24. }
  25. void WebSocketServer::start()
  26. {
  27. this->appendData("server listening start");
  28. if(m_pWebSocketServer->listen(QHostAddress::Any, 6001)){
  29. this->appendData("listening start on 6001");
  30. printf("listening start on 6001\n");
  31. timer->start(5000);
  32. }else{
  33. printf("EchoServer listening failed\n");
  34. exit(1);
  35. }
  36. }
  37. void WebSocketServer::onNewConnection()
  38. {
  39. this->appendData("onNewConnection");
  40. QWebSocket *pSocket = m_pWebSocketServer->nextPendingConnection();
  41. connect(pSocket,&QWebSocket::textMessageReceived,this,&WebSocketServer::processTextMessage);
  42. connect(pSocket,&QWebSocket::disconnected,this,&WebSocketServer::socketDisconnected);
  43. clientList.append(new WebSocketClient("",pSocket));
  44. }
  45. void WebSocketServer::appendData(QString emitlog)
  46. {
  47. emit weblog(emitlog);
  48. }
  49. void WebSocketServer::processTextMessage(QString message)
  50. {
  51. QString data="";
  52. printf("%s\n",message.toUtf8().data());
  53. this->appendData(QString("processTextMessage message: %1").arg(message));
  54. QWebSocket *pClient = qobject_cast<QWebSocket *>(sender()); //几个用户同时连接服务器,获取某个时刻一个设备请求ID
  55. QList<WebSocketClient *>::iterator i;
  56. for(i=clientList.begin();i!=clientList.end();i++){
  57. printf("processTextMessage clientList size:%d\n",clientList.length());
  58. WebSocketClient *client = *i;
  59. if(client->m_client==pClient){ //判断某个时刻一个设备请求ID对应clientList的某个设备创建clientID
  60. QStringList Dat = message.split("\r\n");
  61. QByteArray cmd;
  62. bool found = false;
  63. for(int i=0;i<Dat.length();i++){
  64. if(Dat.at(i).indexOf("{")>=0)
  65. found = true;
  66. if(found)
  67. cmd.append(Dat.at(i).trimmed().toUtf8());
  68. }
  69. QJsonParseError json_error;
  70. QJsonDocument jsonDoc(QJsonDocument::fromJson(cmd,&json_error));
  71. if(json_error.error==QJsonParseError::NoError){
  72. QJsonObject root = jsonDoc.object();
  73. QString cmd = "";
  74. if((!root.value("CMD").isUndefined())&&(!root.value("CMD").isNull())){
  75. if(root.value("CMD").isString())
  76. cmd = root.value("CMD").toString();
  77. else
  78. cmd = QString("%1").arg(root.value("CMD").toInt());
  79. //pClient->sendTextMessage(QString("CMD:%1").arg(cmd));
  80. }
  81. client->Cmd = cmd;
  82. QString stationid="";
  83. if((!root.value("StationID").isUndefined())&&(!root.value("StationID").isNull())){
  84. if(root.value("StationID").isString())
  85. stationid = root.value("StationID").toString();
  86. else
  87. stationid = QString("%1").arg(root.value("StationID").toInt());
  88. //pClient->sendTextMessage(QString("StationID:%1").arg(stationid));
  89. }
  90. client->StationId=stationid;
  91. QString stationname="";
  92. if((!root.value("StationName").isUndefined())&&(!root.value("StationName").isNull())){
  93. if(root.value("StationName").isString())
  94. stationname = root.value("StationName").toString();
  95. else
  96. stationname = QString("%1").arg(root.value("StationName").toInt());
  97. //pClient->sendTextMessage(QString("StationName:%1").arg(stationname));
  98. }
  99. client->StationName=stationname;
  100. QString deviceid="";
  101. if((!root.value("DeviceID").isUndefined())&&(!root.value("DeviceID").isNull())){
  102. if(root.value("DeviceID").isString())
  103. deviceid = root.value("DeviceID").toString();
  104. else
  105. deviceid = QString("%1").arg(root.value("DeviceID").toInt());
  106. //pClient->sendTextMessage(QString("DeviceID:%1").arg(deviceid));
  107. }
  108. client->DeviceId=deviceid;
  109. QString busaddr="";
  110. if((!root.value("BusAddr").isUndefined())&&(!root.value("BusAddr").isNull())){
  111. if(root.value("BusAddr").isString())
  112. busaddr = root.value("BusAddr").toString();
  113. else
  114. busaddr = QString("%1").arg(root.value("BusAddr").toInt());
  115. //pClient->sendTextMessage(QString("BusAddr:%1").arg(busaddr));
  116. }
  117. client->BusAddr=busaddr;
  118. QString count="";
  119. if((!root.value("Count").isUndefined())&&(!root.value("Count").isNull())){
  120. if(root.value("Count").isString())
  121. count = root.value("Count").toString();
  122. else
  123. count = QString("%1").arg(root.value("Count").toInt());
  124. //pClient->sendTextMessage(QString("Count:%1").arg(count));
  125. }
  126. client->Count=count;
  127. QString start;
  128. if((!root.value("Start").isUndefined())&&(!root.value("Start").isNull())){
  129. if(root.value("Start").isString())
  130. start = root.value("Start").toString();
  131. else
  132. start = QString("%1").arg(root.value("Start").toInt());
  133. //pClient->sendTextMessage(QString("Start:%1").arg(start));
  134. }
  135. client->Start=start;
  136. QString limit="";
  137. if((!root.value("Limit").isUndefined())&&(!root.value("Limit").isNull())){
  138. if(root.value("Limit").isString())
  139. limit = root.value("Limit").toString();
  140. else
  141. limit = QString("%1").arg(root.value("Limit").toInt());
  142. //pClient->sendTextMessage(QString("Limit:%1").arg(limit));
  143. }
  144. client->Limit=limit;
  145. QString order;
  146. if((!root.value("Order").isUndefined())&&(!root.value("Order").isNull())){
  147. if(root.value("Order").isString())
  148. order = root.value("Order").toString();
  149. else
  150. order = QString("%1").arg(root.value("Order").toInt());
  151. //pClient->sendTextMessage(QString("Order:%1").arg(order));
  152. }
  153. client->Order=order;
  154. QString time="";
  155. if((!root.value("Time").isUndefined())&&(!root.value("Time").isNull())){
  156. if(root.value("Time").isString())
  157. time = root.value("Time").toString();
  158. else
  159. time = QString("%1").arg(root.value("Time").toInt());
  160. //pClient->sendTextMessage(QString("Time:%1").arg(time));
  161. }
  162. client->Time = time;
  163. }
  164. printf("client->Cmd = %s\n",client->Cmd.toUtf8().data());
  165. //sendtext to client BEGIN
  166. if(QString::compare(client->Cmd,"getStationInfo")==0){
  167. QString stationStr;
  168. for(int i=0;i<16;i++)
  169. {
  170. if(ytStationCount->station[i].Enabled == 0x01){
  171. stationStr.append(QString("{\"StationID\":\"%1\",\"StationName\":\"%2\",\"StationStatus\":%3,\"StationStatusNote\":\"%4\",\"DeviceCount\":%5,\"DeviceAlarm\":%6,\"DeviceFault\":%7,\"LastCommTime\":\"%8\"},").arg(ytStationCount->station[i].StationID).arg(ytStationCount->station[i].StationName).arg(ytStationCount->station[i].StationStatus).arg(ytStationCount->station[i].StationStatusNote).arg(ytStationCount->station[i].DeviceCount).arg(ytStationCount->station[i].DeviceAlarm).arg(ytStationCount->station[i].DeviceFault).arg(ytStationCount->station[i].LastCommTime));
  172. }
  173. }
  174. stationStr=stationStr.left(stationStr.length()-1);
  175. data=QString("{\"time\":\"%1\",\"CMD\":\"%2\",\"VER\":\"1.00\",\"TotalCount\":\"%3\",\"RESULT\":[%4],\"TimeStamp\":\"%5\",\"REPLY\":1}").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(client->Cmd).arg(ytStationCount->StationCount).arg(stationStr).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"));
  176. client->m_client->sendTextMessage(data);
  177. this->appendData(QString("getStationInfo sendtoclient: %1").arg(data));
  178. }else if(QString::compare(client->Cmd,"getStationDetail")==0){
  179. QString stationStr;
  180. for(int i=0;i<16;i++)
  181. {
  182. if(QString::compare(client->StationId,ytStationCount->station[i].StationID)==0)
  183. {
  184. QString deviceStr;
  185. for(int j=0;j<128;j++)
  186. {
  187. if(ytStationCount->station[i].StationDevice[j].Enabled == 0x01)
  188. {
  189. QString pointStr;
  190. for(int k=0;k<256;k++){
  191. if((ytStationCount->station[i].StationDevice[j].DevicePoint[k].Enabled==0x01)&&(ytStationCount->station[i].StationDevice[j].DevicePoint[k].IsKeyPoint == 1)){
  192. QString pointvalueStr;
  193. pointvalueStr.append(QString("{\"AlarmStatus\":%1,\"Value\":%2,\"Time\":\"%3\"}").arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].pointvaluelist[0].AlarmStatus).arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].pointvaluelist[0].Value).arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].pointvaluelist[0].Time));
  194. pointStr.append(QString("{\"BusAddr\":%1,\"PointName\":\"%2\",\"PointType\":%3,\"AlarmType\":%4,\"AlarmStatus\":%5,\"ValueList\" :[%6],\"Time\":\"%7\"}").arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].BusAddr).arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].PointName).arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].PointType).arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].AlarmType).arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].AlarmStatus).arg(pointvalueStr).arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].Time));
  195. break;
  196. }
  197. }
  198. deviceStr.append(QString("{\"DeviceID\":\"%1\",\"DeviceName\":\"%2\",\"DeviceTypeID\":\"%3\",\"DeviceType\":\"%4\",\"DeviceStatus\":%5,\"DeviceStatusNote\":\"%6\",\"KeyPoints\":[%7]},").arg(ytStationCount->station[i].StationDevice[j].DeviceID).arg(ytStationCount->station[i].StationDevice[j].DeviceName).arg(ytStationCount->station[i].StationDevice[j].DeviceTypeID).arg(ytStationCount->station[i].StationDevice[j].DeviceType).arg(ytStationCount->station[i].StationDevice[j].DeviceStatus).arg(ytStationCount->station[i].StationDevice[j].DeviceStatusNote).arg(pointStr));
  199. }
  200. }
  201. deviceStr=deviceStr.left(deviceStr.length()-1);
  202. stationStr.append(QString("{\"StationID\":\"%1\",\"StationName\":\"%2\",\"TotalCount\":%3,\"StationStatus\":%4,\"StationStatusNote\":\"%5\",\"LIST\":[%6]}").arg(ytStationCount->station[i].StationID).arg(ytStationCount->station[i].StationName).arg(ytStationCount->station[i].DeviceCount).arg(ytStationCount->station[i].StationStatus).arg(ytStationCount->station[i].StationStatusNote).arg(deviceStr));
  203. break;
  204. }
  205. }
  206. data=QString("{\"time\":\"%1\",\"CMD\":\"%2\",\"VER\":\"1.00\",\"RESULT\":%3,\"TimeStamp\":\"%4\",\"REPLY\":1}").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(client->Cmd).arg(stationStr).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"));
  207. client->m_client->sendTextMessage(data);
  208. this->appendData(QString("getStationDetail sendtoclient: %1").arg(data));
  209. }else if(QString::compare(client->Cmd,"getDeviceDetail")==0){
  210. QString stationStr;
  211. for(int i=0;i<16;i++)
  212. {
  213. if(QString::compare(client->StationId,ytStationCount->station[i].StationID)==0)
  214. {
  215. QString deviceStr;
  216. for(int j=0;j<128;j++)
  217. {
  218. if(QString::compare(client->DeviceId,ytStationCount->station[i].StationDevice[j].DeviceID)==0)
  219. {
  220. QString pointStr;
  221. for(int k=0;k<256;k++)
  222. {
  223. if(ytStationCount->station[i].StationDevice[j].DevicePoint[k].Enabled==0x01)
  224. {
  225. QString pointvalueStr;
  226. for(int m=0;m<10;m++)
  227. {
  228. pointvalueStr.append(QString("{\"AlarmStatus\":%1,\"Value\":%2,\"Time\":\"%3\"},").arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].pointvaluelist[m].AlarmStatus).arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].pointvaluelist[m].Value).arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].pointvaluelist[m].Time));
  229. }
  230. pointvalueStr=pointvalueStr.left(pointvalueStr.length()-1);
  231. pointStr.append(QString("{\"BusAddr\":%1,\"PointName\":\"%2\",\"PointType\":%3,\"AlarmType\":%4,\"AlarmStatus\":%5,\"Value\":%6,\"LIST\" :[%7],\"Time\":\"%8\"},").arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].BusAddr).arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].PointName).arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].PointType).arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].AlarmType).arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].AlarmStatus).arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].Value).arg(pointvalueStr).arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].Time));
  232. }
  233. }
  234. pointStr=pointStr.left(pointStr.length()-1);
  235. deviceStr.append(QString("{\"DeviceID\":\"%1\",\"DeviceName\":\"%2\",\"DeviceTypeID\":\"%3\",\"DeviceType\":\"%4\",\"DeviceStatus\":%5,\"DeviceStatusNote\":\"%6\",\"Points\":[%7]}").arg(ytStationCount->station[i].StationDevice[j].DeviceID).arg(ytStationCount->station[i].StationDevice[j].DeviceName).arg(ytStationCount->station[i].StationDevice[j].DeviceTypeID).arg(ytStationCount->station[i].StationDevice[j].DeviceType).arg(ytStationCount->station[i].StationDevice[j].DeviceStatus).arg(ytStationCount->station[i].StationDevice[j].DeviceStatusNote).arg(pointStr));
  236. break;
  237. }
  238. }
  239. stationStr.append(QString("{\"StationID\":\"%1\",\"StationName\":\"%2\",\"Device\":[%3]}").arg(ytStationCount->station[i].StationID).arg(ytStationCount->station[i].StationName).arg(deviceStr));
  240. break;
  241. }
  242. }
  243. data=QString("{\"time\":\"%1\",\"CMD\":\"%2\",\"VER\":\"1.00\",\"RESULT\":%3,\"TimeStamp\":\"%4\",\"REPLY\":1}").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(client->Cmd).arg(stationStr).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"));
  244. client->m_client->sendTextMessage(data);
  245. this->appendData(QString("getDeviceDetail sendtoclient: %1").arg(data));
  246. }else if(QString::compare(client->Cmd,"getPatrolRecord")==0){
  247. // QString patrolrecord;
  248. // db.open();
  249. // QSqlQuery qry;
  250. // qry=db.exec(QString("select v_datatime from yt_t_rec where uq_station_id = '%1' order by v_datatime %2 limit %3,%4").arg(client->StationId).arg(client->Order).arg(client->Start).arg(client->Limit));
  251. // QString timestr;
  252. // while(qry.next())
  253. // {
  254. // timestr.append(QString("{\"Time\":\"%1\"},").arg(qry.value(0).toDateTime().toString("yyyy-MM-dd HH:mm:ss").toUtf8().data()));
  255. // }
  256. // timestr=timestr.left(timestr.length()-1);
  257. // QSqlQuery qry1;
  258. // QString stationname,totalcount;
  259. // qry1=db.exec(QString("select v_station_name,(select count(*) from yt_t_rec) from yt_t_station where uq_station_id = '%1'").arg(client->StationId));
  260. // while(qry1.next())
  261. // {
  262. // stationname = qry1.value(0).toString().toUtf8().data();
  263. // totalcount = qry1.value(1).toString().toUtf8().data();
  264. // }
  265. // patrolrecord=QString("{\"StationID\":\"%1\",\"StationName\":\"%2\",\"LIST\":[%3]}").arg(client->StationId).arg(stationname).arg(timestr);
  266. // db.close();
  267. QString patrolrecord;
  268. QString timestr;
  269. int clientstart = client->Start.toInt();
  270. int clientlimit = client->Limit.toInt() ;
  271. printf("client->Order = %s\n",client->Order.toUtf8().data());
  272. if(QString::compare(client->Order,"DESC")==0)
  273. {
  274. //printf("testest11111");
  275. counttemp=0;
  276. for(int i=PatrolRecordList.size()-1;i>=0;i--){
  277. //printf("testest22222");
  278. if(QString::compare(PatrolRecordList.at(i).StationId,client->StationId)==0)
  279. {
  280. //printf("counttemp = %d\n",counttemp);
  281. counttemp++;
  282. if(counttemp >= clientstart && counttemp < clientstart+clientlimit)
  283. {
  284. printf("PatrolRecordList.at(i).DataTime = %s\n",PatrolRecordList.at(i).DataTime.toUtf8().data());
  285. timestr.append(QString("{\"Time\":\"%1\"},").arg(PatrolRecordList.at(i).DataTime));
  286. }
  287. }
  288. }
  289. }
  290. if(QString::compare(client->Order,"ASC")==0)
  291. {
  292. counttemp=0;
  293. for(int i=0;i<PatrolRecordList.size();i++){
  294. if(QString::compare(PatrolRecordList.at(i).StationId,client->StationId)==0)
  295. {
  296. counttemp++;
  297. if(counttemp >= clientstart && counttemp < clientstart+clientlimit)
  298. {
  299. timestr.append(QString("{\"Time\":\"%1\"},").arg(PatrolRecordList.at(i).DataTime));
  300. }
  301. }
  302. }
  303. }
  304. timestr=timestr.left(timestr.length()-1);
  305. QString stationname;
  306. QString totalcount = QString::number(PatrolRecordList.size());
  307. for(int i=0;i<16;i++)
  308. {
  309. if(QString::compare(client->StationId,ytStationCount->station[i].StationID)==0)
  310. {
  311. stationname = ytStationCount->station[i].StationName;
  312. }
  313. }
  314. patrolrecord=QString("{\"StationID\":\"%1\",\"StationName\":\"%2\",\"LIST\":[%3]}").arg(client->StationId).arg(stationname).arg(timestr);
  315. data=QString("{\"time\":\"%1\",\"CMD\":\"%2\",\"VER\":\"1.00\",\"TotalCount\":%3,\"Count\":%4,\"RESULT\":%5,\"TimeStamp\":\"%6\",\"REPLY\":1}").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(client->Cmd).arg(totalcount).arg(client->Limit).arg(patrolrecord).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"));
  316. client->m_client->sendTextMessage(data);
  317. this->appendData(QString("getPatrolRecord sendtoclient: %1").arg(data));
  318. }else if(QString::compare(client->Cmd,"getPatrolDetail")==0){
  319. // db.open();
  320. // QSqlQuery qry;
  321. // qry=db.exec(QString("select t_values from yt_t_rec where uq_station_id = '%1' and v_datatime = '%2'").arg(client->StationId).arg(client->Time));
  322. // while(qry.next())
  323. // {
  324. // data = qry.value(0).toString().toUtf8().data();
  325. // }
  326. // db.close();
  327. for(int i=0;i<PatrolRecordList.size();i++){
  328. if(QString::compare(client->StationId,PatrolRecordList.at(i).StationId)==0 && QString::compare(client->Time,PatrolRecordList.at(i).DataTime)==0){
  329. data = PatrolRecordList.at(i).Values;
  330. }
  331. }
  332. client->m_client->sendTextMessage(data);
  333. this->appendData(QString("getPatrolDetail sendtoclient: %1").arg(data));
  334. }
  335. //sendtext to client END
  336. }
  337. }
  338. }
  339. void WebSocketServer::patrolrecord(QList<QStringList> PatrolList)
  340. {
  341. PatrolRecordList.clear();
  342. for(int i=0;i<PatrolList.size();i++){
  343. ReceivePatrolRecord patrolrecord;
  344. patrolrecord.DataTime = PatrolList.at(i).at(0);
  345. patrolrecord.StationId = PatrolList.at(i).at(1);
  346. patrolrecord.Values = PatrolList.at(i).at(2);
  347. PatrolRecordList.append(patrolrecord);
  348. }
  349. }
  350. void WebSocketServer::socketDisconnected()
  351. {
  352. this->appendData("socketDisconnected");
  353. QWebSocket *pClient = qobject_cast<QWebSocket *>(sender());
  354. if(pClient){
  355. QList<WebSocketClient *>::iterator i;
  356. for(i=clientList.begin();i!=clientList.end();i++){
  357. WebSocketClient *client = *i;
  358. if(client->m_client==pClient){
  359. clientList.removeAll(client);
  360. pClient->deleteLater();
  361. return;
  362. }
  363. }
  364. }
  365. }
  366. void WebSocketServer::onSslErrors(const QList<QSslError> &)
  367. {
  368. printf("Ssl errors occurred\n");
  369. this->appendData("Ssl errors occurred");
  370. }
  371. void WebSocketServer::timeout()
  372. {
  373. count++;
  374. if(count>5){
  375. QList<WebSocketClient *>::iterator i;
  376. for(i=clientList.begin();i!=clientList.end();i++){
  377. WebSocketClient *client = *i;
  378. if(client->m_client){
  379. client->m_client->sendTextMessage(QString("{\"Cmd\":\"HeartBeat\",\"time\":\"%1\"}").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")));
  380. this->appendData(QString("{\"Cmd\":\"HeartBeat\",\"time\":\"%1\"}").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")));
  381. }
  382. }
  383. count=0;
  384. }
  385. }