|
@@ -7,13 +7,17 @@ service_maintain::service_maintain(iv::service_maintain_param & param)
|
|
|
{
|
|
|
mparam = param;
|
|
|
|
|
|
+ mnBroadPort = std::atoi(mparam.mstrbroadport.data());
|
|
|
+
|
|
|
mpServer = new QUdpSocket(this);
|
|
|
|
|
|
mpServer->bind(QHostAddress::Any,std::atoi(mparam.mstrlistenport.data()));
|
|
|
|
|
|
+ mpBroad = new QUdpSocket(this);
|
|
|
+
|
|
|
connect(mpServer,SIGNAL(readyRead()),this,SLOT(onRecvData()));
|
|
|
|
|
|
- StartService();
|
|
|
+ // StartService();
|
|
|
|
|
|
|
|
|
}
|
|
@@ -43,20 +47,56 @@ int service_maintain::generateRandomNumber()
|
|
|
|
|
|
void service_maintain::ProcessData(QByteArray & ba)
|
|
|
{
|
|
|
-
|
|
|
+ if(ba.size()<sizeof(int))
|
|
|
+ {
|
|
|
+ std::cout<<"require data is error."<<std::endl;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ int nreq; //0 stop 1 start 2 query
|
|
|
+ memcpy(&nreq,ba.data(),sizeof(int));
|
|
|
+ if(nreq == 0)
|
|
|
+ {
|
|
|
+ StopService();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(nreq == 1)
|
|
|
+ {
|
|
|
+ StartService();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(nreq == 2)
|
|
|
+ {
|
|
|
+ BroadStatus();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ std::cout<<" require code is: "<<nreq<<" Error require."<<std::endl;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void service_maintain::StartService()
|
|
|
{
|
|
|
- if((mnServiceCode > 0)&&(mnServcieStatus == 1))
|
|
|
+ if((mnServcieStatus == 1))
|
|
|
+ {
|
|
|
+ std::cout<<" Service is Opening. "<<std::endl;
|
|
|
+ BroadStatus();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(mnServcieStatus == 2)
|
|
|
{
|
|
|
- std::cout<<" Service is opened. "<<std::endl;
|
|
|
+ std::cout<<" Service is work."<<std::endl;
|
|
|
+ BroadStatus();
|
|
|
return;
|
|
|
}
|
|
|
int nport = generateRandomNumber();
|
|
|
nport = nport + 14000;
|
|
|
mnServiceCode = nport;
|
|
|
|
|
|
+
|
|
|
std::string strfrpc = mparam.mstrfrpcfolder + "/frpc";
|
|
|
QFileInfo xFileInfo(strfrpc.data());
|
|
|
if(xFileInfo.exists() == false)
|
|
@@ -81,6 +121,7 @@ void service_maintain::StartService()
|
|
|
|
|
|
if(mnServiceCode > 0)
|
|
|
{
|
|
|
+ mnServcieStatus = 1;
|
|
|
mpfrpProcess = new QProcess(this);
|
|
|
|
|
|
|
|
@@ -128,6 +169,7 @@ std::string service_maintain::CreateIniFile()
|
|
|
snprintf(strline,1000,"local_port = %s\n",mparam.mstrnomachineport.data());xFile.write(strline,strnlen(strline,1000));
|
|
|
snprintf(strline,1000,"remote_port = %d\n",mnServiceCode);xFile.write(strline,strnlen(strline,1000));
|
|
|
xFile.close();
|
|
|
+ return mstrIniFile;
|
|
|
|
|
|
}
|
|
|
|
|
@@ -138,7 +180,7 @@ void service_maintain::onProcessStarted()
|
|
|
|
|
|
void service_maintain::onProcessEnd()
|
|
|
{
|
|
|
- QProcess * proc = (QProcess *)sender();
|
|
|
+// QProcess * proc = (QProcess *)sender();
|
|
|
}
|
|
|
|
|
|
void service_maintain::onChRead()
|
|
@@ -152,6 +194,42 @@ void service_maintain::onReadStandardOutput()
|
|
|
QByteArray ba = proc->readAllStandardOutput();
|
|
|
std::cout<<"Std Out:"<<std::endl;
|
|
|
std::cout<<ba.data()<<std::endl;
|
|
|
+
|
|
|
+ QString str(ba);
|
|
|
+ if(str.contains("i/o timeout"))
|
|
|
+ {
|
|
|
+ mnServiceCode = -2;
|
|
|
+ mstrError = "Can't Connect Server.Please Check Network";
|
|
|
+ mnServcieStatus = 0;
|
|
|
+ std::cout<<"Can't Connect Server.Please Check Network."<<std::endl;
|
|
|
+ BroadStatus();//Send Status Code.
|
|
|
+ }
|
|
|
+ if(str.contains("connect: connection refused"))
|
|
|
+ {
|
|
|
+ mnServiceCode = -3;
|
|
|
+ mstrError = "Connect Server Fail.Please Check xml, Maybe server port not correct. ";
|
|
|
+ mnServcieStatus = 0;
|
|
|
+ std::cout<<"Connect Server Fail.Please Check xml, Maybe server port not correct. "<<std::endl;
|
|
|
+ BroadStatus();//Send Status Code.
|
|
|
+ }
|
|
|
+ if(str.contains("token in login doesn't match token from configuration"))
|
|
|
+ {
|
|
|
+ mnServiceCode = -4;
|
|
|
+ mstrError = "token error.Please Check xml, Maybe token not correct. ";
|
|
|
+ mnServcieStatus = 0;
|
|
|
+ std::cout<<"token error.Please Check xml, Maybe token not correct. "<<std::endl;
|
|
|
+ BroadStatus();//Send Status Code.
|
|
|
+ }
|
|
|
+ if(str.contains("start proxy success"))
|
|
|
+ {
|
|
|
+ mstrError = "Success.";
|
|
|
+ mnServcieStatus = 2;
|
|
|
+ std::cout<<" Success."<<std::endl;
|
|
|
+ BroadStatus();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
void service_maintain::onReadStandardError()
|
|
@@ -162,3 +240,51 @@ void service_maintain::onReadStandardError()
|
|
|
std::cout<<ba.data()<<std::endl;
|
|
|
}
|
|
|
|
|
|
+void service_maintain::StopService()
|
|
|
+{
|
|
|
+ if(mnServcieStatus == 0)
|
|
|
+ {
|
|
|
+ std::cout<<" Service is closed."<<std::endl;
|
|
|
+ mnServiceCode = 0;
|
|
|
+ BroadStatus();//Broad
|
|
|
+ //Not Need Stop
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(mnServcieStatus == 1 )
|
|
|
+ {
|
|
|
+ mnServiceCode = 0;
|
|
|
+ mnServcieStatus = 0;
|
|
|
+ BroadStatus();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ std::cout<<" End frp program."<<std::endl;
|
|
|
+ mpfrpProcess->kill();
|
|
|
+ mnServcieStatus = 0;
|
|
|
+ mnServiceCode = 0;
|
|
|
+ BroadStatus();
|
|
|
+ //Broad Status
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+void service_maintain::BroadStatus()
|
|
|
+{
|
|
|
+ char strout[1000];
|
|
|
+ int nsize = 2*sizeof(int);
|
|
|
+ memcpy(strout,&mnServiceCode,sizeof(int));
|
|
|
+ memcpy(strout+sizeof(int),&mnServcieStatus,sizeof(int));
|
|
|
+ if(mnServcieStatus == 0)
|
|
|
+ {
|
|
|
+ if(mnServiceCode<0)
|
|
|
+ {
|
|
|
+ memcpy(strout+2*sizeof(int),mstrError.data(),mstrError.length());
|
|
|
+ nsize = nsize + mstrError.length();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ mpBroad->writeDatagram(strout,nsize,QHostAddress::Broadcast,mnBroadPort);
|
|
|
+// mpBroad->writeDatagram(strout,nsize,QHostAddress("10.16.1.239"),mnBroadPort);
|
|
|
+ //Broad Data;
|
|
|
+}
|
|
|
+
|