123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390 |
- #include "rabbitclient.h"
- #include <QDir>
- #include <QString>
- #include <QIODevice>
- #include <QFile>
- #include <QMessageBox>
- #include <QBuffer>
- #include <QJsonParseError>
- #include <QDebug>
- #include <QJsonDocument>
- rabbitClient::rabbitClient(QObject *parent) : QObject(parent)
- {
- }
- /*
- * @brief: the constructor
- * @param: type "recvClient" "sendClient"
- * @ret: void
- * @birth: created by czm in 20230327
- */
- rabbitClient::rabbitClient(QString type)
- {
- if(type=="recvClient"){
- initRecv();
- }else if(type =="sendClient")
- {
- initSend();
- }else{
- }
- }
- /*
- * @brief: the destructor
- * @param: void
- * @ret: void
- * @birth: created by czm in 20230327
- */
- rabbitClient::~rabbitClient()
- {
- disconnect();
- if(rconf){
- delete rconf;
- rconf = NULL;
- }
- if(objRabbitmq)
- {
- delete objRabbitmq;
- objRabbitmq = NULL;
- }
- }
- /**********************************************
- * 发送 单个消息 参数传递 消息内容和状态
- *
- * ********************************************/
- int rabbitClient::sendMsg(const std::string str)
- {
- printf("-------------rabbit client sendmsg----------------------\n");
- int iRet;
- amqp_basic_properties_t properties = {};
- CMessage cmsg(str, properties, objRabbitmq->routing_keys_name);
- iRet = objRabbitmq->PublishMessage(cmsg, ErrorReturn);
- if(iRet!=0){
- cout<<"Send Rabbitmq publish Message : "<<ErrorReturn <<endl;
- disconnect_index++;
- if(disconnect_index == 15){
- connection_state = false;
- disConnect();
- emit restart_send_client_signal();//信号
- return -1;
- }
- }else {
- disconnect_index = 0;
- }
- QThread::sleep(1);
- return 0;
- }
- /************************************************
- * 接收单个 消息 参数 传递接收消息的 str 和状态
- * 接收失败15次,即判断连接失败,断开连接,否则,每次重置统计接收失败次数
- * *********************************************/
- int rabbitClient::recvMsg()
- {
- int iRet;
- std::string str;
- while(true){
- iRet = objRabbitmq->ConsumerMessage(str,
- objRabbitmq->queue_name,
- ErrorReturn);
- if(iRet!= 0){
- cout<<"Recv Rabbitmq consumer Message : "<<ErrorReturn <<endl;
- disconnect_index++;
- if(disconnect_index == 15){
- connection_state = false;
- disConnect();
- emit restart_recv_client_signal();//信号
- return -1;
- }
- }
- disconnect_index = 0;
- if(str!=""){
- str.erase(0,1);//删除首尾双引号
- str.erase(str.end()-1);
- std::string t;
- for (int var = 0; var < str.length(); ++var) {
- if(str[var]=='\\'){//第一次删除"\\"
- }else{
- t+=str[var];
- }
- }
- t.erase(0,1);//暂时移除首尾{}
- t.erase(t.end()-1);
- //-------------去除param数组里面的多余转义字符-------------------//
- int temp1 = t.find_first_of('[');
- int temp2 = t.find_first_of(']');
- if(-1 != temp1){//param包含数组
- string array_first_t;
- array_first_t = t.substr(0,temp1);
- string array_end_t;
- array_end_t = t.substr(temp2+1);
- int num_temp1 = array_first_t.find_first_of('{');
- if(num_temp1!=-1){//param非数组,但包含数组 //json数据格式*******{****************[{*****},{*****}]*****}*********
- string array_second_t;
- string array_third_t;
- string array_middle_t;
- string temp_str = array_first_t;
- array_first_t = array_first_t.substr(0,num_temp1);//*******
- array_second_t = temp_str.substr(num_temp1);//{*********
- temp_str = array_end_t;
- int num_temp2 = array_end_t.find_first_of('}');
- array_end_t = array_end_t.substr(num_temp2);//}*******
- array_third_t = temp_str.substr(0,num_temp2);//******
- temp_str.clear();
- for(int i=0;i<array_second_t.size();i++){
- if(array_second_t[i]=='"'){
- temp_str+='\\';
- }
- temp_str+=array_second_t[i];
- }
- array_second_t = temp_str;
- temp_str.clear();
- for(int i=0;i<array_third_t.size();i++){
- if(array_third_t[i]=='"'){
- temp_str+='\\';
- }
- temp_str+=array_third_t[i];
- }
- array_third_t = temp_str;
- for(int i=temp1;i<=temp2;i++){
- if(t[i] =='"'){
- array_middle_t+='\\';
- array_middle_t+='\\';
- array_middle_t+='\\';
- }
- array_middle_t+=t[i];//[{*******},{******}]
- }
- t='{'+array_first_t+array_second_t+array_middle_t+array_third_t+array_end_t+'}';
- }else{//param数组 //json数据格式*************[{******},{*******},{******}]***************
- string array_middle_t;
- for(int i = temp1;i<=temp2;i++){
- if(t[i] == '"'){
- array_middle_t += '\\';
- }
- array_middle_t+=t[i];
- }
- t.clear();
- t = '{' + array_first_t+array_middle_t+array_end_t+'}';
- }
- }else{//param不包含数组 //json数据格式*****************{**********}*****************
- //-----------去除paramjson里面的多余转义字符--------------------//
- int num1 = t.find_first_of('{',0);
- int num2 = t.find_first_of('}',0);
- int num3 = t.find_last_of('}',0);
- if(num2 == num3){//*****************{**********}*****************
- if(num1!=-1){
- string first_t;
- first_t=t.substr(0,num1);
- string middle_t;
- for(int i=num1;i<=num2;i++){
- if(t[i] == '"'){
- middle_t+='\\';
- }
- middle_t+=t[i];
- }
- string end_t;
- end_t = t.substr(num2+1);
- t.clear();
- t = '{' + first_t + middle_t + end_t + '}';
- }else{
- t = '{' + t + '}';
- }
- }else{//**********{*******{******}**{******}**{******}}**********
- string array_first_t,array_end_t,array_middle_t;
- string original_t,last_t;
- original_t = t;
- array_first_t = t.substr(0,num1+1);//*********{ //t=*******{******}**{******}**{******}}**********
- t = original_t;
- array_end_t = t.substr(num3);//}***********
- array_middle_t = original_t.substr(num1+1,num3-num1-1);//****{*****}**{****}**{****}**
- bool judge_flag = false;
- for(int i=0;i<array_middle_t.size();i++){
- if(!judge_flag){
- if(array_middle_t[i]== '"'){
- last_t += '\\';
- }else if(array_middle_t[i] == '{'){
- judge_flag = true;
- }
- last_t+=array_middle_t[i];
- }else{
- if(array_middle_t[i]== '"'){
- last_t += '\\';
- last_t += '\\';
- last_t += '\\';
- }else if(array_middle_t[i] == '}'){
- judge_flag = false;
- }
- last_t+=array_middle_t[i];
- }
- }
- t = '{'+array_first_t+last_t+array_end_t+'}';
- }
- }
- emit sendmsg_recvclientToRecvstate(t);//信号*/
- //0509
- //emit sendmsg_recvclientToRecvstate(tmp);
- }
- QThread::sleep(1);
- }
- return 0;
- }
- /*
- * @brief: init recvClient(初始化接收客户机)
- * @param: void
- * @ret: void
- * @birth: created by czm in 20230327
- */
- void rabbitClient::initRecv()
- {
- rconf = new ReadConf();
- QString path = QDir::currentPath()+"/"+RECVCONFPATH;
- ReadConf rconf_;
- rconf->Read_Conf(path.toStdString(),rconf_);
- objRabbitmq = new CRabbitMqClient(rconf_.host,
- rconf_.port,
- rconf_.userName,
- rconf_.password,
- NULL,
- rconf_.channel_id,
- rconf_.queue_name,
- rconf_.exchange_name,
- rconf_.keys_name);
- recv_connect();
- }
- /*
- * @brief: init sendClient(初始化发送客户机)
- * @param: void
- * @ret: void
- * @birth: created by czm in 20230327
- */
- void rabbitClient::initSend()
- {
- rconf = new ReadConf();
- QString path = QDir::currentPath()+"/"+SENDCONFPATH;
- ReadConf rconf_;
- rconf->Read_Conf(path.toStdString(),rconf_);
- objRabbitmq = new CRabbitMqClient(rconf_.host,
- rconf_.port,
- rconf_.userName,
- rconf_.password,
- NULL,
- rconf_.channel_id,
- rconf_.queue_name,
- rconf_.exchange_name,
- rconf_.keys_name);
- send_connect();
- }
- /*
- * @brief: disconnect Client(断开连接)
- * @param: void
- * @ret: int 0-success other-fail
- * @birth: created by czm in 20230327
- */
- int rabbitClient::disConnect()
- {
- int ret = objRabbitmq->DisConnect(ErrorReturn);
- return ret;
- }
- /*
- * @brief: connect recv Client(接收客户机连接)
- * @param: void
- * @ret: int 0-success other-fail
- * @birth: created by czm in 20230327
- */
- void rabbitClient::recv_connect()
- {
- int iRet = objRabbitmq->Connect(ErrorReturn);
- if(iRet != 0){
- connection_state = false;
- emit restart_recv_client_signal();//信号
- cout<<iRet<<endl;
- cout<<"Recv Rabbitmq Connect : "<<ErrorReturn<<endl;
- return;
- }
- connection_state = true;
- // CExchange my_exchange(objRabbitmq->exchange_name);
- // iRet = objRabbitmq->DeclareExchange(my_exchange,
- // ErrorReturn);
- // if(iRet!=0){
- // cout<<iRet<<endl;
- // cout<<"Recv Rabbitmq ExchangeDeclare : "<<ErrorReturn<<endl;
- // }
- // CQueue my_Queue(objRabbitmq->queue_name);
- // iRet = objRabbitmq->DeclareQueue(my_Queue,
- // ErrorReturn);
- // if(iRet!=0){
- // cout<<iRet<<endl;
- // cout<<"Recv Rabbitmq QueueDeclare : "<<ErrorReturn<<endl;
- // }
- // iRet = objRabbitmq->BindQueueToExchange(my_Queue, my_exchange,
- // objRabbitmq->routing_keys_name,
- // ErrorReturn);
- // if(iRet!=0){
- // cout<<iRet<<endl;
- // cout<<"Recv Rabbitmq QueueBind : "<<ErrorReturn<<endl;
- // }
- disconnect_index =0;
- }
- /*
- * @brief: connect send Client(连接发送客户机)
- * @param: void
- * @ret: int 0-success other-fail
- * @birth: created by czm in 20230327
- */
- void rabbitClient::send_connect()
- {
- int iRet = objRabbitmq->Connect(ErrorReturn);
- if(iRet != 0){
- connection_state = false;
- emit restart_send_client_signal();//信号
- cout<<iRet<<endl;
- cout<<"Send Rabbitmq Connect : "<<ErrorReturn<<endl;
- return;
- }
- connection_state = true;
- // CExchange my_exchange(objRabbitmq->exchange_name);
- // iRet = objRabbitmq->DeclareExchange(my_exchange,ErrorReturn);
- // if(iRet!=0){
- // cout<<iRet<<endl;
- // cout<<"Send Rabbitmq ExchangeDeclare : "<<ErrorReturn<<endl;
- // }
- // CQueue my_Queue(objRabbitmq->queue_name);
- // iRet = objRabbitmq->DeclareQueue(my_Queue, ErrorReturn);
- // if(iRet!=0){
- // cout<<iRet<<endl;
- // cout<<"Send Rabbitmq QueueDeclare : "<<ErrorReturn<<endl;
- // }
- // iRet = objRabbitmq->BindQueueToExchange(my_Queue, my_exchange, objRabbitmq->routing_keys_name, ErrorReturn);
- // if(iRet!=0){
- // cout<<iRet<<endl;
- // cout<<"Send Rabbitmq QueueBind : "<<ErrorReturn<<endl;
- // }
- disconnect_index = 0;
- }
|