@@ -52,16 +52,31 @@ Client::Client(QObject *parent, QWebSocket* _socket, QSettings* config)
5252 connect (dlibWorker, &DLIBWorker::log, this , &Client::log);
5353 dlibWorkerThread->start ();
5454
55- QObject::connect (socket, &QWebSocket::textMessageReceived, this , &Client::processTextMessage);
56- QObject::connect (socket, &QWebSocket::binaryMessageReceived, this , &Client::processBinaryMessage);
55+ QObject::connect (socket, &QWebSocket::textMessageReceived, this , &Client::processTextMessage, Qt::QueuedConnection);
56+ QObject::connect (socket, &QWebSocket::binaryMessageReceived, this , &Client::processBinaryMessage, Qt::QueuedConnection);
57+
58+ QObject::connect (socket, QOverload<QAbstractSocket::SocketError>::of (&QWebSocket::error), [this ]() {
59+ assert (false );
60+ log (QString (" Socket error: %1" ).arg (socket->errorString ()));
61+ });
62+
63+ QObject::connect (socket, &QWebSocket::sslErrors, [this ](const QList<QSslError> &errors) {
64+ assert (false );
65+ for (const auto & it : errors)
66+ {
67+ log (QString (" Socket SSL Error: %1" ).arg (it.errorString ()));
68+ }
69+ });
70+
71+ QObject::connect (socket, &QWebSocket::disconnected, [this ]() {
72+ log (QString (" Disconnected. Close reason: %1" ).arg (socket->closeReason ()));
73+ });
5774
5875 clearSecondaryDisplayTimer = new QTimer (this );
5976 clearSecondaryDisplayTimer->setInterval (1000 );
6077 connect (clearSecondaryDisplayTimer, &QTimer::timeout, [this ](){
6178 secondaryDisplay->setPixmap (QPixmap ());
6279 });
63-
64- log (" Started processing incoming images. (if any)" );
6580}
6681
6782Client::~Client ()
@@ -77,26 +92,24 @@ Client::~Client()
7792 }
7893
7994 socket->flush ();
80- socket->close ();
8195}
8296
8397void Client::sendCommand (Client::Command cmd, const QVariant &ctx)
8498{
8599 QJsonObject obj;
86100
87- obj[" command " ] = static_cast <int >(cmd);
101+ obj[keyCommand ] = static_cast <int >(cmd);
88102 if (ctx.isValid ())
89- obj[" context " ] = QJsonValue::fromVariant (ctx);
103+ obj[keyContext ] = QJsonValue::fromVariant (ctx);
90104
91105 QJsonDocument jDoc (obj);
92106
93107 sendTextMessage (QString (jDoc.toJson (QJsonDocument::JsonFormat::Compact)));
94108}
95109
96- void Client::throwException (const QString& str )
110+ void Client::throwException (const std::exception& e )
97111{
98- std::cout << " FATAL ERROR: " << str.toStdString () << std::endl;
99- throw str;
112+ throw e;
100113}
101114
102115void Client::processTextMessage (const QString& string)
@@ -106,18 +119,17 @@ void Client::processTextMessage(const QString& string)
106119 if (jDoc.isNull () || jDoc.isEmpty () || !jDoc.isObject ())
107120 return ;
108121
109- const unsigned int command = (unsigned )(jDoc[" command " ].toInt (-1 ));
122+ const unsigned int command = (unsigned )(jDoc[keyCommand ].toInt (-1 ));
110123
111- QJsonValue ctxVal = jDoc[" context " ];
124+ QJsonValue ctxVal = jDoc[keyContext ];
112125 QVariant context;
113126
114127 if (ctxVal != QJsonValue::Undefined)
115128 context = ctxVal.toVariant ();
116129
117- switch (command)
130+ switch ( static_cast <Command>( command) )
118131 {
119- // Client wants to change its name:
120- case (unsigned int )Command::SETTING_NAME:
132+ case Command::SETTING_NAME:
121133 {
122134// ClientHandler* cHandler = qobject_cast<ClientHandler *>(parent());
123135 QString _name = context.toString ();
@@ -143,44 +155,49 @@ void Client::processTextMessage(const QString& string)
143155 break ;
144156 }
145157
146- // Client wants to send a message:
147- case (unsigned int )Command::MESSAGE:
158+ case Command::MESSAGE:
148159 {
149160 emit log (" says: " + context.toString ());
150161 break ;
151162 }
152163
153- case ( unsigned int ) Command::SETTING_LABELCOUNT:
164+ case Command::SETTING_LABELCOUNT:
154165 {
155166 settings.labelCount = context.toULongLong ();
156167
157168 sendCommand (Command::SETTING_LABELCOUNT, settings.labelCount .load ());
158169 break ;
159170 }
160171
161- case ( unsigned int ) Command::SETTING_OBJDETECTIONENABLED:
172+ case Command::SETTING_OBJDETECTIONENABLED:
162173 {
163174 settings.objectDetectionEnabled = context.toBool ();
164175
165- sendCommand (Command::SETTING_LABELCOUNT , settings.objectDetectionEnabled .load ());
176+ sendCommand (Command::SETTING_OBJDETECTIONENABLED , settings.objectDetectionEnabled .load ());
166177 break ;
167178 }
168179
169- case ( unsigned int ) Command::SETTING_DETERMINISTICOBJECTDETECTION:
180+ case Command::SETTING_DETERMINISTICOBJECTDETECTION:
170181 {
171182 settings.deterministicObjectDetection = context.toBool ();
172183
173184 sendCommand (Command::SETTING_DETERMINISTICOBJECTDETECTION, settings.deterministicObjectDetection .load ());
174185 break ;
175186 }
176187
177- case ( unsigned int ) Command::SETTING_FACERECOGNITIONENABLED:
188+ case Command::SETTING_FACERECOGNITIONENABLED:
178189 {
179190 settings.faceRecognitionEnabled = context.toBool ();
180191
181192 sendCommand (Command::SETTING_FACERECOGNITIONENABLED, settings.faceRecognitionEnabled .load ());
182193 break ;
183194 }
195+
196+ default :
197+ {
198+ emit log (QString (" Received unrecognized command! %1" ).arg (command));
199+ break ;
200+ }
184201 // implement later ...
185202 }
186203}
@@ -213,6 +230,10 @@ void Client::processBinaryMessage(const QByteArray& data)
213230 // log("Received image frame with size: " + QString::number(data.size()) + " bytes. Processing it...");
214231 emit process (data);
215232 }
233+ else
234+ {
235+ log (" Frame dropped!" );
236+ }
216237
217238 if (dialog)
218239 {
@@ -347,12 +368,12 @@ void Client::sendBinaryMessage(const QByteArray &data)
347368 socket->sendBinaryMessage (data);
348369}
349370
350- QListWidgetItem* Client::getListWidgetItem ()
371+ QListWidgetItem* Client::getListWidgetItem () const
351372{
352373 return listItem;
353374}
354375
355- ClientDialog* Client::getDialog ()
376+ ClientDialog* Client::getDialog () const
356377{
357378 return dialog;
358379}
0 commit comments