123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443 |
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- /*
- #include <yaml-cpp/yaml.h>
- #include <QDateTime>
- #include <iostream>
- #include <vector>
- #include <memory>
- #include <QMutex>
- #include <thread>
- #include "modulecomm.h"
- #include "cloud.pb.h"
- #include <iostream>
- #include <memory>
- #include <string>
- #include <grpcpp/grpcpp.h>
- #include "uploadmsg.grpc.pb.h"
- using grpc::Channel;
- using grpc::ClientContext;
- using grpc::Status;
- std::string gstrserverip = "140.143.237.38";
- std::string gstrserverport = "9000";
- std::string gstruploadinterval = "100";
- void * gpa;
- QMutex gMutexMsg;
- std::thread * guploadthread;
- namespace iv {
- struct msgunit
- {
- char mstrmsgname[256];
- int mnBufferSize = 10000;
- int mnBufferCount = 1;
- void * mpa;
- std::shared_ptr<char> mpstrmsgdata;
- int mndatasize = 0;
- bool mbRefresh = false;
- bool mbImportant = false;
- int mnkeeptime = 100;
- };
- }
- std::vector<iv::msgunit> mvectormsgunit;
- std::vector<iv::msgunit> mvectorctrlmsgunit;
- std::string gstrVIN = "AAAAAAAAAAAAAAAAA";
- std::string gstrqueryMD5 = "5d41402abc4b2a76b9719d911017c592";
- std::string gstrctrlMD5 = "5d41402abc4b2a76b9719d911017c592";
- int gindex = 0;
- void ListenData(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
- {
- int nsize = mvectorctrlmsgunit.size();
- int i;
- for(i=0;i<nsize;i++)
- {
- if(strncmp(strmemname,mvectorctrlmsgunit[i].mstrmsgname,255) == 0)
- {
- gMutexMsg.lock();
- char * strtem = new char[nSize];
- memcpy(strtem,strdata,nSize);
- mvectorctrlmsgunit[i].mpstrmsgdata.reset(strtem);
- mvectorctrlmsgunit[i].mndatasize = nSize;
- mvectorctrlmsgunit[i].mbRefresh = true;
- gMutexMsg.unlock();
- break;
- }
- }
- }
- void sharequerymsg(iv::cloud::cloudmsg * pxmsg)
- {
- int i;
- int nsize = pxmsg->xclouddata_size();
- for(i=0;i<nsize;i++)
- {
- int j;
- int nquerysize = mvectormsgunit.size();
- for(j=0;j<nquerysize;j++)
- {
- if(strncmp(pxmsg->xclouddata(i).msgname().data(), mvectormsgunit[j].mstrmsgname,255) == 0)
- {
- qDebug("size is %d ",pxmsg->xclouddata(i).data().size());
- iv::modulecomm::ModuleSendMsg(mvectormsgunit[j].mpa,pxmsg->xclouddata(i).data().data(),pxmsg->xclouddata(i).data().size());
- break;
- }
- }
- }
- }
- void threadquery()
- {
- int nsize = mvectormsgunit.size();
- int nctrlsize = mvectorctrlmsgunit.size();
- int i;
- qint64 nlasttime = 0;
- int ninterval = atoi(gstruploadinterval.data());
- if(ninterval<=0)ninterval = 100;
- QTime xTime;
- xTime.start();
- int nlastsend = xTime.elapsed();
- std::string target_str = gstrserverip+":";
- target_str = target_str + gstrserverport ;//std::to_string()
- auto cargs = grpc::ChannelArguments();
- cargs.SetMaxReceiveMessageSize(1024 * 1024 * 1024); // 1 GB
- cargs.SetMaxSendMessageSize(1024 * 1024 * 1024);
- std::shared_ptr<Channel> channel = grpc::CreateCustomChannel(
- target_str, grpc::InsecureChannelCredentials(),cargs);
- std::unique_ptr<iv::Upload::Stub> stub_ = iv::Upload::NewStub(channel);
- iv::queryreq request;
- iv::ctrlreq ctrreq;
- iv::ctrlReply ctrreply;
- int nid = 0;
- int nctrlid = 0;
- // Container for the data we expect from the server.
- iv::queryReply reply;
- while(true)
- {
- std::this_thread::sleep_for(std::chrono::milliseconds(1));
- if(abs(xTime.elapsed()-nlastsend)<ninterval)
- {
- continue;
- }
- bool bImportant = false;
- int nkeeptime = 0;
- iv::cloud::cloudmsg xmsg;
- xmsg.set_xtime(QDateTime::currentMSecsSinceEpoch());
- nlastsend = xTime.elapsed();
- gMutexMsg.lock();
- // std::vector<iv::msgunit> xv = mvectorctrlmsgunit;
- for(i=0;i<nctrlsize;i++)
- {
- if(mvectorctrlmsgunit[i].mbRefresh)
- {
- mvectorctrlmsgunit[i].mbRefresh = false;
- if(mvectorctrlmsgunit[i].mbImportant)
- {
- bImportant = true;
- }
- if(mvectorctrlmsgunit[i].mnkeeptime > nkeeptime)
- {
- nkeeptime = mvectorctrlmsgunit[i].mnkeeptime;
- }
- iv::cloud::cloudunit xcloudunit;
- xcloudunit.set_msgname(mvectorctrlmsgunit[i].mstrmsgname);
- xcloudunit.set_data(mvectorctrlmsgunit[i].mpstrmsgdata.get(),mvectorctrlmsgunit[i].mndatasize);
- iv::cloud::cloudunit * pcu = xmsg.add_xclouddata();
- pcu->CopyFrom(xcloudunit);
- }
- }
- gMutexMsg.unlock();
- {
- ClientContext context ;
- // qint64 time1 = QDateTime::currentMSecsSinceEpoch();
- request.set_strquerymd5(gstrqueryMD5);
- request.set_strvin(gstrVIN);
- request.set_nlasttime(nlasttime);
- QDateTime xTime;
- xTime.fromMSecsSinceEpoch(1607905685318); //1607914763641
- // qDebug("time:%s",xTime.toString("yyyy-MM-dd:hh:mm:ss:zzz").toLatin1().data());
- qDebug("nlasttime is %ld",nlasttime);//1607905685318
- nid++;
- // The actual RPC.
- Status status = stub_->query(&context, request, &reply);
- if (status.ok()) {
- std::cout<<nid<<" query successfully, res is "<<reply.nres()<<std::endl;
- if(reply.nres() == 1)
- {
- if(nlasttime != xmsg.xtime())
- {
- iv::cloud::cloudmsg xmsg;
- if(xmsg.ParseFromArray(reply.data().data(),reply.data().size()))
- {
- sharequerymsg(&xmsg);
- }
- }
- nlasttime = reply.ntime();
- }
- } else {
- std::cout << status.error_code() << ": " << status.error_message()
- << std::endl;
- std::cout<<"RPC failed"<<std::endl;
- std::this_thread::sleep_for(std::chrono::milliseconds(900));
- }
- }
- if(xmsg.xclouddata_size()>0)
- {
- int nbytesize = xmsg.ByteSize();
- std::vector<char> pvectordata;
- pvectordata.resize(nbytesize);
- if(xmsg.SerializeToArray(pvectordata.data(),nbytesize))
- {
- ClientContext context ;
- qint64 time1 = QDateTime::currentMSecsSinceEpoch();
- ctrreq.set_id(nctrlid);nctrlid++;
- ctrreq.set_strctrlmd5(gstrctrlMD5);
- ctrreq.set_strvin(gstrVIN);
- ctrreq.set_ntime(time1);
- ctrreq.set_data(pvectordata.data(),pvectordata.size());
- ctrreq.set_bimportant(bImportant);
- ctrreq.set_kepptime(nkeeptime);
- Status status = stub_->ctrl(&context, ctrreq, &ctrreply);
- if (status.ok()) {
- std::cout<<"send id "<<ctrreply.nsendid()<<std::endl;
- } else {
- std::cout << status.error_code() << ": " << status.error_message()
- << std::endl;
- std::cout<<"RPC failed"<<std::endl;
- std::this_thread::sleep_for(std::chrono::milliseconds(900));
- }
- }
- pvectordata.clear();
- }
- }
- }
- void dec_yaml(const char * stryamlpath)
- {
- YAML::Node config;
- try
- {
- config = YAML::LoadFile(stryamlpath);
- }
- catch(YAML::BadFile e)
- {
- qDebug("load error.");
- return;
- }
- std::vector<std::string> vecmodulename;
- if(config["server"])
- {
- gstrserverip = config["server"].as<std::string>();
- }
- if(config["port"])
- {
- gstrserverport = config["port"].as<std::string>();
- }
- if(config["uploadinterval"])
- {
- gstruploadinterval = config["uploadinterval"].as<std::string>();
- }
- if(config["VIN"])
- {
- gstrVIN = config["VIN"].as<std::string>();
- }
- if(config["VIN"])
- {
- gstrVIN = config["VIN"].as<std::string>();
- }
- if(config["queryMD5"])
- {
- gstrqueryMD5 = config["queryMD5"].as<std::string>();
- }
- if(config["ctrlMD5"])
- {
- gstrctrlMD5 = config["ctrlMD5"].as<std::string>();
- }
- std::string strmsgname;
- if(config["querymessage"])
- {
- for(YAML::const_iterator it= config["querymessage"].begin(); it != config["querymessage"].end();++it)
- {
- std::string strtitle = it->first.as<std::string>();
- std::cout<<strtitle<<std::endl;
- if(config["querymessage"][strtitle]["msgname"]&&config["querymessage"][strtitle]["buffersize"]&&config["querymessage"][strtitle]["buffercount"])
- {
- iv::msgunit xmu;
- strmsgname = config["querymessage"][strtitle]["msgname"].as<std::string>();
- strncpy(xmu.mstrmsgname,strmsgname.data(),255);
- xmu.mnBufferSize = config["querymessage"][strtitle]["buffersize"].as<int>();
- xmu.mnBufferCount = config["querymessage"][strtitle]["buffercount"].as<int>();
- mvectormsgunit.push_back(xmu);
- }
- }
- }
- else
- {
- }
- if(config["ctrlmessage"])
- {
- std::string strnodename = "ctrlmessage";
- for(YAML::const_iterator it= config[strnodename].begin(); it != config[strnodename].end();++it)
- {
- std::string strtitle = it->first.as<std::string>();
- std::cout<<strtitle<<std::endl;
- if(config[strnodename][strtitle]["msgname"]&&config[strnodename][strtitle]["buffersize"]&&config[strnodename][strtitle]["buffercount"])
- {
- iv::msgunit xmu;
- strmsgname = config[strnodename][strtitle]["msgname"].as<std::string>();
- strncpy(xmu.mstrmsgname,strmsgname.data(),255);
- xmu.mnBufferSize = config[strnodename][strtitle]["buffersize"].as<int>();
- xmu.mnBufferCount = config[strnodename][strtitle]["buffercount"].as<int>();
- if(config[strnodename][strtitle]["bimportant"])
- {
- std::string strimportant = config[strnodename][strtitle]["bimportant"].as<std::string>();
- if(strimportant == "true")
- {
- xmu.mbImportant = true;
- }
- }
- if(config[strnodename][strtitle]["keeptime"])
- {
- std::string strkeep = config[strnodename][strtitle]["keeptime"].as<std::string>();
- xmu.mnkeeptime = atoi(strkeep.data());
- }
- mvectorctrlmsgunit.push_back(xmu);
- }
- }
- }
- else
- {
- }
- return;
- }
- */
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- , ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- std::string stryamlpath = "./driver_cloud_grpc_pc.yaml";
- // dec_yaml(stryamlpath.data());
- // int i;
- // for(i=0;i<mvectormsgunit.size();i++)
- // {
- // mvectormsgunit[i].mpa = iv::modulecomm::RegisterSend(mvectormsgunit[i].mstrmsgname,mvectormsgunit[i].mnBufferSize,mvectormsgunit[i].mnBufferCount);
- // }
- // for(i=0;i<mvectorctrlmsgunit.size();i++)
- // {
- // mvectorctrlmsgunit[i].mpa = iv::modulecomm::RegisterRecv(mvectorctrlmsgunit[i].mstrmsgname,ListenData);
- // }
- // guploadthread = new std::thread(threadquery);
- mgrpcpc = new grpcpc(stryamlpath);
- mgrpcpc->start();
- }
- MainWindow::~MainWindow()
- {
- mgrpcpc->requestInterruption();
- while(mgrpcpc->isFinished());
- delete ui;
- }
|