Bläddra i källkod

change common/makeprotointerface for view_message. now is test ok.

yuchuli 3 år sedan
förälder
incheckning
9d947c96a6

+ 70 - 4
src/common/makeprotointerface/protointerface.cpp

@@ -183,6 +183,13 @@ void protointerface::Proc()
         }
     }
 
+    WriteCodeLine("",&xFileout);
+    WriteCodeLine("#include \"google/protobuf/io/zero_copy_stream_impl.h\"",&xFileout);
+    WriteCodeLine("#include \"google/protobuf/text_format.h\"",&xFileout);
+    WriteCodeLine("#include <iostream>",&xFileout);
+    WriteCodeLine("#include <QString>",&xFileout);
+    WriteCodeLine("#include <QStringList>",&xFileout);
+    WriteCodeLine("",&xFileout);
 
     char strline[1000];
     WriteCodeLine("",&xFileout);
@@ -197,10 +204,56 @@ void protointerface::Proc()
     WriteCodeLine("",&xFileout);
 
 
-    snprintf(strline,1000,"#define MSGCOUNT %d\n",xvectorclassname.size());xFileout.write(strline);
-    snprintf(strline,1000,"const int typecount = %d;\n",xvectorclassname.size());xFileout.write(strline);
+    snprintf(strline,1000,"#define MSGCOUNT %u\n",(unsigned int)xvectorclassname.size());xFileout.write(strline);
+    snprintf(strline,1000,"const int typecount = %u;\n",(unsigned int)xvectorclassname.size());xFileout.write(strline);
     snprintf(strline,1000,"iv::protomsgtype gmsgtype[MSGCOUNT];\n");xFileout.write(strline);
 
+
+    WriteCodeLine("",&xFileout);
+    WriteCodeLine("static bool CheckAParseLine(QString strline)",&xFileout);
+    WriteCodeLine("{",&xFileout);
+    WriteCodeLine("\tif(strline.size()<3)return true;",&xFileout);
+    WriteCodeLine("\tQString str = strline.mid(0,2);",&xFileout);
+    WriteCodeLine("\tint i;",&xFileout);
+    WriteCodeLine("\tfor(i=0;i<9;i++)",&xFileout);
+    WriteCodeLine("\t{",&xFileout);
+    WriteCodeLine("\t\tQString strmark = QString::number(i)+\":\";",&xFileout);
+    WriteCodeLine("\t\tif(str == strmark)",&xFileout);
+    WriteCodeLine("\t\t{",&xFileout);
+    WriteCodeLine("\t\t\treturn false;",&xFileout);
+    WriteCodeLine("\t}",&xFileout);
+    WriteCodeLine("\t}",&xFileout);
+    WriteCodeLine("\tstr = strline.mid(0,3);",&xFileout);
+    WriteCodeLine("\tfor(i=10;i<99;i++)",&xFileout);
+    WriteCodeLine("\t{",&xFileout);
+    WriteCodeLine("\t\tQString strmark = QString::number(i)+\":\";",&xFileout);
+    WriteCodeLine("\t\tif(str == strmark)",&xFileout);
+    WriteCodeLine("\t\t{",&xFileout);
+    WriteCodeLine("\t\t\treturn false;",&xFileout);
+    WriteCodeLine("\t\t}",&xFileout);
+    WriteCodeLine("\t}",&xFileout);
+    WriteCodeLine("\treturn true;",&xFileout);
+    WriteCodeLine("}",&xFileout);
+    WriteCodeLine("",&xFileout);
+    WriteCodeLine("",&xFileout);
+
+    WriteCodeLine("static bool CheckParseOK(std::string strout)",&xFileout);
+    WriteCodeLine("{",&xFileout);
+    WriteCodeLine("\tQString str(strout.data());",&xFileout);
+    WriteCodeLine("\tQStringList strline = str.split('\\n');",&xFileout);
+    WriteCodeLine("\tint i;",&xFileout);
+    WriteCodeLine("\tfor(i=0;i<strline.size();i++)",&xFileout);
+    WriteCodeLine("\t{",&xFileout);
+    WriteCodeLine("\t\tif(CheckAParseLine(strline[i]) == false)",&xFileout);
+    WriteCodeLine("\t\t{",&xFileout);
+    WriteCodeLine("\t\t\treturn false;",&xFileout);
+    WriteCodeLine("\t\t}",&xFileout);
+    WriteCodeLine("\t}",&xFileout);
+    WriteCodeLine("\treturn true;",&xFileout);
+    WriteCodeLine("\t}",&xFileout);
+    WriteCodeLine("",&xFileout);
+    WriteCodeLine("",&xFileout);
+
 //    snprintf(strline,1000,"{\n");xFileout.write(strline);
     snprintf(strline,1000,"void InitMsgType()\n");xFileout.write(strline);
     snprintf(strline,1000,"{\n");xFileout.write(strline);
@@ -249,8 +302,21 @@ void protointerface::Proc()
     WriteCodeLine("\t{",&xFileout);
     WriteCodeLine("\t\tif(gmsgtype[i].mpmsg->ParseFromArray(strdata,nsize))",&xFileout);
     WriteCodeLine("\t\t{",&xFileout);
-    WriteCodeLine("\t\t\txvectorrtn.push_back(i);",&xFileout);
-    WriteCodeLine("\t\t\txvectorprobname.push_back(gmsgtype[i].mstrtypename);",&xFileout);
+    WriteCodeLine("\t\t\tusing google::protobuf::TextFormat;",&xFileout);
+    WriteCodeLine("\t\t\tusing google::protobuf::io::FileOutputStream;",&xFileout);
+    WriteCodeLine("\t\t\tusing google::protobuf::io::ZeroCopyOutputStream;",&xFileout);
+    WriteCodeLine("\t\t\tstd::string strout;",&xFileout);
+    WriteCodeLine("\t\t\tZeroCopyOutputStream *output = new google::protobuf::io::StringOutputStream(&strout);",&xFileout);
+    WriteCodeLine("\t\t\tbool success = TextFormat::Print(*(gmsgtype[i].mpmsg), output);",&xFileout);
+    WriteCodeLine("\t\t\tif(success)",&xFileout);
+    WriteCodeLine("\t\t\t{",&xFileout);
+    WriteCodeLine("\t\t\t\tif(CheckParseOK(strout))",&xFileout);
+    WriteCodeLine("\t\t\t\t{",&xFileout);
+    WriteCodeLine("\t\t\t\t\txvectorrtn.push_back(i);",&xFileout);
+    WriteCodeLine("\t\t\t\t\txvectorprobname.push_back(gmsgtype[i].mstrtypename);",&xFileout);
+    WriteCodeLine("\t\t\t\t}",&xFileout);
+    WriteCodeLine("\t\t\t}",&xFileout);
+    WriteCodeLine("\t\t\tdelete output;",&xFileout);
     WriteCodeLine("\t\t}",&xFileout);
     WriteCodeLine("\t}",&xFileout);
     WriteCodeLine("\treturn xvectorrtn;",&xFileout);

+ 38 - 1
src/tool/view_message/dialogviewmessage.cpp

@@ -3,6 +3,9 @@
 
 #include "ivprotoif.h"
 
+#include "google/protobuf/io/zero_copy_stream_impl.h"
+#include "google/protobuf/text_format.h"
+
 DialogViewMessage::DialogViewMessage(std::string strmsgname,QWidget *parent) :
     QDialog(parent),
     ui(new Ui::DialogViewMessage)
@@ -28,6 +31,8 @@ DialogViewMessage::DialogViewMessage(std::string strmsgname,QWidget *parent) :
 
     std::string gx = x.GetTypeName();
 
+    connect(this,SIGNAL(msgupdate()),this,SLOT(UpdatePE()));
+
     setWindowTitle(strmsgname.data());
 }
 
@@ -69,7 +74,13 @@ void DialogViewMessage::UpdateRawMsg(const char *strdata, const unsigned int nSi
         mvectorprob = GetProbProtoIndex(strxdata,nSize,mvectorprobname);
     }
 
-    qDebug("prob size is %d ",mvectorprob.size());
+//    iv::testmodulecommext * pt = new iv::testmodulecommext;
+//    bool bx = pt->ParseFromArray(strdata,nSize);
+
+//    google::protobuf::Message * pt2 = (google::protobuf::Message * )pt;
+//    bool bx2 = pt2->ParseFromArray(strdata,nSize);
+
+//    qDebug("prob size is %d ",mvectorprob.size());
     if(mvectorprob.size() > 0)
     {
 
@@ -77,7 +88,33 @@ void DialogViewMessage::UpdateRawMsg(const char *strdata, const unsigned int nSi
         if(msg_ptr != NULL)
         {
             qDebug("parse ok.");
+            using google::protobuf::TextFormat;
+            using google::protobuf::io::FileOutputStream;
+            using google::protobuf::io::ZeroCopyOutputStream;
+            std::string strout;
+            ZeroCopyOutputStream *output = new google::protobuf::io::StringOutputStream(&strout);//new FileOutputStream(file_descriptor);
+
+            bool success = TextFormat::Print(*(msg_ptr), output);
+            if(success)
+            {
+                mMutexInfo.lock();
+                mstrmsginfo = strout;
+                mMutexInfo.unlock();
+                emit msgupdate();
+ //               qDebug(strout.data());
+            }
+
+            delete output;
         }
     }
     delete strxdata;
 }
+
+void DialogViewMessage::UpdatePE()
+{
+    std::string strinfo;
+    mMutexInfo.lock();
+    strinfo = mstrmsginfo;
+    mMutexInfo.unlock();
+    ui->plainTextEdit->setPlainText(strinfo.data());
+}

+ 5 - 1
src/tool/view_message/dialogviewmessage.h

@@ -27,7 +27,7 @@ public:
 
 private slots:
     void closeEvent(QCloseEvent * e);
-
+    void UpdatePE();
 
 
 signals:
@@ -39,6 +39,10 @@ private:
 
     std::string mstrmsgname;
 
+    std::string mstrmsginfo;
+    QMutex mMutexInfo;
+
+
     void * mparaw;
 
     iv::modulecommext::modulecommmsg<iv::testmodulecommext> * mpa;