! * \~chinese 插件连接的具体操作处理。因为此插件是非Qt事件,所以在此函数中等待。 * * \~english Specific operation processing of plug-in connection. * Because of it is a non-Qt event loop, so wait in here. * * \~ * \return * \li >= 0: continue, Interval call time (msec) * \li = -1: stop * \li < -1: error * \see CConnect::Connect() CConnect::slotTimeOut() */
| 304 | * \see CConnect::Connect() CConnect::slotTimeOut() |
| 305 | */ |
| 306 | int CBackendLibVNCServer::OnProcess() |
| 307 | { |
| 308 | //qDebug(log) << Q_FUNC_INFO; |
| 309 | int nRet = 0; |
| 310 | if(!m_pClient) |
| 311 | { |
| 312 | // Stop |
| 313 | return -1; |
| 314 | } |
| 315 | |
| 316 | struct timeval timeout = {0, DEFAULT_TIMEOUT}; |
| 317 | fd_set set; |
| 318 | FD_ZERO(&set); |
| 319 | if(RFB_INVALID_SOCKET != m_pClient->sock) |
| 320 | { |
| 321 | FD_SET(m_pClient->sock, &set); |
| 322 | } |
| 323 | rfbSocket eventFd = m_Event.GetFd(); |
| 324 | if(RFB_INVALID_SOCKET != eventFd) |
| 325 | { |
| 326 | FD_SET(eventFd, &set); |
| 327 | } |
| 328 | rfbSocket fd = RFB_INVALID_SOCKET; |
| 329 | fd = std::max(eventFd, m_pClient->sock); |
| 330 | //qDebug(log) << "fd:" << fd << "select m_pClient->sock:" << (int)m_pClient->sock << "event:" << eventFd; |
| 331 | nRet = select(fd + 1, &set, NULL, NULL, &timeout); |
| 332 | //qDebug(log) << "select end"; |
| 333 | if (nRet < 0) { |
| 334 | qCritical(log) << "select fail:" << nRet << "errno" << errno << strerror(errno); |
| 335 | return nRet; |
| 336 | } |
| 337 | |
| 338 | /*if(0 == nRet) |
| 339 | { |
| 340 | //qDebug(log) << "Time out"; |
| 341 | return 0; |
| 342 | }//*/ |
| 343 | |
| 344 | if(RFB_INVALID_SOCKET != eventFd && FD_ISSET(eventFd, &set)) |
| 345 | { |
| 346 | //qDebug(log) << "fires event"; |
| 347 | m_Event.Reset(); |
| 348 | } |
| 349 | |
| 350 | if(RFB_INVALID_SOCKET != m_pClient->sock |
| 351 | && FD_ISSET(m_pClient->sock, &set)) { |
| 352 | //qDebug(log) << "HandleRFBServerMessage"; |
| 353 | if(!HandleRFBServerMessage(m_pClient)) |
| 354 | { |
| 355 | qCritical(log) << "HandleRFBServerMessage fail"; |
| 356 | return -2; |
| 357 | } |
| 358 | } |
| 359 | |
| 360 | return 0; |
| 361 | } |
| 362 | |
| 363 | int CBackendLibVNCServer::WakeUp() |