void CtrlComm::errorSlot(QAbstractSocket::SocketError) { LOG_ERROR << "socket error !\n"; disconnectedSlot(); sleep(1); connectToServer("127.0.0.1", 2001); }
DVRServer::DVRServer(int id, QObject *parent) : QObject(parent), m_configuration(id), m_devicesLoaded(false) { m_api = new ServerRequestManager(this); connect(&m_configuration, SIGNAL(changed()), this, SIGNAL(changed())); connect(m_api, SIGNAL(loginSuccessful()), SLOT(updateCameras())); connect(m_api, SIGNAL(disconnected()), SLOT(disconnectedSlot())); connect(m_api, SIGNAL(loginRequestStarted()), this, SIGNAL(loginRequestStarted())); connect(m_api, SIGNAL(loginSuccessful()), this, SIGNAL(loginSuccessful())); connect(m_api, SIGNAL(serverError(QString)), this, SIGNAL(serverError(QString))); connect(m_api, SIGNAL(loginError(QString)), this, SIGNAL(loginError(QString))); connect(m_api, SIGNAL(disconnected()), this, SIGNAL(disconnected())); connect(m_api, SIGNAL(statusChanged(int)), this, SIGNAL(statusChanged(int))); connect(m_api, SIGNAL(onlineChanged(bool)), this, SIGNAL(onlineChanged(bool))); connect(&m_refreshTimer, SIGNAL(timeout()), SLOT(updateCameras())); }
void CtrlComm::run() { openComm(); carSocket_ = new QTcpSocket(); // carSocket_->setSocketOption(QAbstractSocket::SendBufferSizeSocketOption, // 0); connect(carSocket_, SIGNAL(connected()), this, SLOT(connectedSlot()), Qt::DirectConnection); connect(carSocket_, SIGNAL(disconnected()), this, SLOT(disconnectedSlot()), Qt::DirectConnection); connect(carSocket_, SIGNAL(readyRead()), this, SLOT(readyReadSlot()), Qt::DirectConnection); connect(carSocket_, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(errorSlot(QAbstractSocket::SocketError)), Qt::DirectConnection); connect(this, SIGNAL(sendToServerSignal(QByteArray)), this, SLOT(sendToServer(QByteArray)), Qt::DirectConnection); QSettings *configIniRead = new QSettings("xcar.ini", QSettings::IniFormat); QString ipResult = configIniRead->value("/cmd_server/ip").toString(); QString portResult = configIniRead->value("/cmd_server/port").toString(); delete configIniRead; char tmpdata[5] = {(unsigned char)0xff, (unsigned char)0x02, (unsigned char)0x02, (unsigned char)0x80, (unsigned char)0xff}; connectToServer(ipResult.toStdString().c_str(), portResult.toShort()); while (true) { #if 1 if (!serial_->isOpen()) { sleep(1); // emit sendToServerSignal(tmpdata); LOG_ERROR << "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; continue; } unsigned char tmp[5]; memset(&tmp, 0x00, 5); int count = serial_->readData((char *)tmp, 5, timeOut); if (count <= 0) { // emit sendToServerSignal(tmpdata); continue; } // LOG_ERROR<<"1 ===================================== not // find data\n "; // carSocket_->write((const char*)tmp, count); // LOG_ERROR<<"2 ===================================== not // find data\n "; // carSocket_->waitForBytesWritten(timeOut); // LOG_ERROR<<"3 ===================================== not find // data\n "; // continue; QByteArray okData((const char *)tmp); serialArray_.append(okData); // LOG_DEBUG<<"[Serial], recv data: "<<serialArray_.toHex(); // 0xFF 0xFF char spos[2] = {(unsigned char)0xff}; char epos[2] = {(unsigned char)0xff}; int startPos = serialArray_.indexOf(spos, 0); if (startPos == -1) { LOG_ERROR << "1 not find data\n "; serialArray_.clear(); continue; } int endPos = serialArray_.indexOf(epos, startPos + 1); if (endPos == -1) { LOG_ERROR << "2 not find data\n "; continue; } if (endPos - startPos == 1) { serialArray_.clear(); //TODO !!! LOG_ERROR << "3 not find data\n "; continue; } QByteArray serialBuf = serialArray_.mid(startPos, endPos - startPos + 1); if (serialBuf[1] == 0x02 && (serialBuf[3] != 0x80 || serialBuf[3] != 0x7f)) { QByteArray t = serialBuf.toHex(); // LOG_ERROR<<t; } serialArray_.clear(); char light_front[5] = {(unsigned char)0xff, (unsigned char)0x03, (unsigned char)0x03, (unsigned char)0x01}; char light_back[5] = {(unsigned char)0xff, (unsigned char)0x03, (unsigned char)0x03, (unsigned char)0x02}; char power[3] = {(unsigned char)0xff, (unsigned char)0x07}; if (serialBuf.indexOf(light_front, 0) == 0) { emit sendLightMode(1); } else if (serialBuf.indexOf(light_back, 0) == 0) { emit sendLightMode(2); } else if (serialBuf.indexOf(power, 0) == 0) { short a = serialBuf[2]; short b = serialBuf[3]; int value = a << 8 | b; emit showLeftPowerSignal(value); } #endif // sleep(0.1); if (isConnected_) { // f = sendToServer(tmp); // QByteArray serialBuf; // serialBuf.append("test socket\n"); emit sendToServerSignal(serialBuf); // LOG_INFO<<"*****************\n"; // printf("send: %x\n", tmp); } else ; // printf("not connected !\n"); } }