Browse Source

complete driver_service_maintain.

yuchuli 1 year ago
parent
commit
4ded708aba

+ 1 - 0
src/driver/driver_service_maintain/main.cpp

@@ -15,6 +15,7 @@ void LoadParam(std::string strxmlpath,iv::service_maintain_param & xparam)
     xparam.mstrnomachineport = xp.GetParam("local_port","4000");
     xparam.mstrfrpcfolder = xp.GetParam("frpfolder","/home/nvidia/frp");
     xparam.mstrlistenport = xp.GetParam("listenport","60009");
+    xparam.mstrbroadport = xp.GetParam("broadport","60019");
 }
 
 

+ 131 - 5
src/driver/driver_service_maintain/service_maintain.cpp

@@ -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;
+}
+

+ 7 - 1
src/driver/driver_service_maintain/service_maintain.h

@@ -22,6 +22,7 @@ struct service_maintain_param
 //    std::string mstrnomachineremoteport;
     std::string mstrfrpcfolder;
     std::string mstrlistenport;
+    std::string mstrbroadport;
 };
 
 }
@@ -45,9 +46,14 @@ private:
     iv::service_maintain_param mparam;
 
     QUdpSocket * mpServer;
+    QUdpSocket * mpBroad;
 
     void ProcessData(QByteArray & ba);
 
+    void BroadStatus();
+
+    int mnBroadPort;
+
 private:
     void StartService();
     void StopService();
@@ -57,7 +63,7 @@ private:
     void DeleteIniFile();
 
 
-    int mnServcieStatus = 0;  //0 not open  1 open
+    int mnServcieStatus = 0;  //0 not open  1 opening   2 work
     int mnServiceCode = 0;    // >0 OK -1 Fail
     std::string mstrError;
     std::string mstrIniFile;