void DomoticzTCP::Do_Work() { char buf[100]; int sec_counter = 0; while (!m_stoprequested) { if ( (m_socket == INVALID_SOCKET)&& (!m_stoprequested) ) { sleep_seconds(1); sec_counter++; if (sec_counter % 12 == 0) { mytime(&m_LastHeartbeat); } if (m_stoprequested) break; m_retrycntr++; if (m_retrycntr>=RETRY_DELAY) { m_retrycntr=0; if (!ConnectInternal()) { _log.Log(LOG_STATUS,"Domoticz: retrying in %d seconds...",RETRY_DELAY); } } } else { //this could take a long time... maybe there will be no data received at all, //so it's no good to-do the heartbeat timing here m_LastHeartbeat = mytime(NULL); int bread=recv(m_socket,(char*)&buf,sizeof(buf),0); if (m_stoprequested) break; if (bread<=0) { _log.Log(LOG_ERROR,"Domoticz: TCP/IP connection closed! %s",m_szIPAddress.c_str()); closesocket(m_socket); m_socket=INVALID_SOCKET; if (!m_stoprequested) { _log.Log(LOG_STATUS,"Domoticz: retrying in %d seconds...",RETRY_DELAY); m_retrycntr=0; continue; } } else { boost::lock_guard<boost::mutex> l(readQueueMutex); onRFXMessage((const unsigned char *)&buf,bread); } } } _log.Log(LOG_STATUS,"Domoticz: TCP/IP Worker stopped..."); }
void DomoticzTCP::FromProxy(const unsigned char *data, size_t datalen) { /* data received from slave */ boost::lock_guard<boost::mutex> l(readQueueMutex); onRFXMessage(data, datalen); }
void RFXComTCP::OnData(const unsigned char *pData, size_t length) { boost::lock_guard<boost::mutex> l(readQueueMutex); onRFXMessage(pData, length); }