Browse Source

change driver_cloud_swap_client.

yuchuli 3 năm trước cách đây
mục cha
commit
64cfe31f15

+ 84 - 0
src/driver/driver_cloud_swap_client/calcping.cpp

@@ -0,0 +1,84 @@
+#include "calcping.h"
+
+CalcPing::CalcPing(std::string strPingIP,int ncount)
+{
+    mpthread = new std::thread(&CalcPing::threadping,this,strPingIP,ncount);
+}
+
+CalcPing::~CalcPing()
+{
+    mbRun = false;
+    mpthread->join();
+}
+
+void CalcPing::threadping(std::string strPingIP,int ncount)
+{
+    QProcess pingProcess;
+    QString strArg = "ping " + QString("-c ")+QString::number(ncount) + QString(" ") + QString(strPingIP.data()) ;  //strPingIP 为设备IP地址
+    while(mbRun)
+    {
+        pingProcess.start(strArg,QIODevice::ReadOnly);
+        pingProcess.waitForFinished(-1);
+
+        QString p_stdout = QString::fromLocal8Bit( pingProcess.readAllStandardOutput());
+
+//        std::cout<<p_stdout.toStdString()<<std::endl;
+        bool bPingSuccess = false;
+
+        if((p_stdout.contains("TTL="))||(p_stdout.contains("ttl="))) //我采用这个字符来判断 对不对?
+        {
+            bPingSuccess = true;
+        }else
+        {
+            bPingSuccess = false;
+        }
+        if(bPingSuccess)
+        {
+            mbSuccess = true;
+            QList<QString> baline =p_stdout.split('\n');//x.split(QRegExp("\n ")) ;//ba.split('\n');
+            int nline = baline.size();
+            int i;
+            for(i=0;i<nline;i++)
+            {
+                QString x(baline[i]);
+       //         QList<QByteArray> badata = baline[i].split('\t');
+                QStringList badata = x.split(QRegExp("[\t ,;/]"));
+
+                if(badata.size()>=5)
+                {
+                    QString strx = badata[0];
+                    if(strx == "rtt")
+                    {
+                        double fmin,favg,fmax,fdev;
+                        fmin = atof(QString(badata[6]).toLatin1().data());
+                        favg = atof(QString(badata[7]).toLatin1().data());
+                        fmax = atof(QString(badata[8]).toLatin1().data());
+                        fdev = atof(QString(badata[9]).toLatin1().data());
+                        std::cout<<" avg: "<<favg<<" min: "<<fmin<<" max: "<<fmax<<" dev: "<<fdev<<std::endl;
+                        mfmin = fmin;
+                        mfavg = favg;
+                        mfmax = fmax;
+                        mfdev = fdev;
+
+                    }
+
+                }
+
+            }
+        }
+        else
+        {
+            mbSuccess = false;
+        }
+    }
+}
+
+bool CalcPing::GetPingValue(double &fmin, double &favg, double &fmax, double &fdev)
+{
+    if(mbSuccess == false)return false;
+    fmin = mfmin;
+    favg = mfavg;
+    fmax = mfmax;
+    fdev = mfdev;
+    return true;
+}

+ 31 - 0
src/driver/driver_cloud_swap_client/calcping.h

@@ -0,0 +1,31 @@
+#ifndef CALCPING_H
+#define CALCPING_H
+
+
+#include <thread>
+
+#include <QProcess>
+#include <iostream>
+
+
+class CalcPing
+{
+public:
+    CalcPing(std::string strPingIP,int ncount);
+    ~CalcPing();
+
+private:
+    bool mbSuccess = false;
+    double mfmin,mfavg,mfmax,mfdev;
+    std::thread * mpthread;
+    bool mbRun = true;
+
+private:
+    void threadping(std::string strPingIP,int ncount);
+
+public:
+    bool GetPingValue(double & fmin,double & favg,double & fmax,double & fdev);
+
+};
+
+#endif // CALCPING_H

+ 4 - 2
src/driver/driver_cloud_swap_client/driver_cloud_swap_client.pro

@@ -21,7 +21,8 @@ SOURCES += \
     ../../include/msgtype/cloudswap.pb.cc \
         main.cpp \
     grpcclient.cpp \
-    cloudswap.grpc.pb.cc
+    cloudswap.grpc.pb.cc \
+    calcping.cpp
 
 # Default rules for deployment.
 qnx: target.path = /tmp/$${TARGET}/bin
@@ -54,5 +55,6 @@ HEADERS += \
     ../../include/msgtype/cloud.pb.h \
     ../../include/msgtype/cloudswap.pb.h \
     grpcclient.h \
-    cloudswap.grpc.pb.h
+    cloudswap.grpc.pb.h \
+    calcping.h
 

+ 18 - 4
src/driver/driver_cloud_swap_client/grpcclient.cpp

@@ -17,6 +17,8 @@ grpcclient::grpcclient(std::string stryamlpath)
     ggrpcclient = this;
     dec_yaml(stryamlpath.data());
 
+    mpCalcPing = new CalcPing(gstrserverip,5);
+
     int i;
     for(i=0;i<(int)mvectormsgunit.size();i++)
     {
@@ -64,10 +66,22 @@ void grpcclient::sendcloudmsg(iv::cloud::cloudmsg &xmsg,std::shared_ptr<::grpc::
 
         request.set_nmsgindex(nmsgindex);
         request.set_nmsgtime(std::chrono::system_clock::now().time_since_epoch().count());
-        request.set_pingavg(0);
-        request.set_pingdev(0);
-        request.set_pingmax(0);
-        request.set_pingmin(0);
+        double fpingavg,fpingmax,fpingmin,fpingdev;
+        if(mpCalcPing->GetPingValue(fpingmin,fpingavg,fpingmax,fpingdev))
+        {
+            request.set_pingavg(fpingavg);
+            request.set_pingdev(fpingdev);
+            request.set_pingmax(fpingmax);
+            request.set_pingmin(fpingmin);
+        }
+        else
+        {
+            std::cout<<" can't get ping value. "<<std::endl;
+            request.set_pingavg(0);
+            request.set_pingdev(0);
+            request.set_pingmax(0);
+            request.set_pingmin(0);
+        }
         request.set_strnodeid(mstrnodeid);
         request.set_strobjnodeid(mstrobjnodeid);
         request.set_xdata(strbuf,nbytesize);

+ 4 - 0
src/driver/driver_cloud_swap_client/grpcclient.h

@@ -25,6 +25,8 @@
 #include <memory>
 #include <string>
 
+#include "calcping.h"
+
 #include <grpcpp/grpcpp.h>
 
 #include "cloudswap.grpc.pb.h"
@@ -84,6 +86,8 @@ private:
     int mnlatency = 0;
     std::vector<qint64> mvectorlatency;
 
+    CalcPing * mpCalcPing;
+
 private:
     iv::cloud::cloudmsg mcloudemsg;
     std::mutex mmutexmsg;