📄 publicclass.cpp~
字号:
memcpy(&pNode->m_nodeinfo,&st,sizeof(st_nodeinfo)); m_SendNode.append(pNode); //通知发送线程有数据需要发送 m_NoticSendLock.unlock(); return 1;}bool CNodeManage :: AddSendDataNodeEx(long DestPid,long DestThread,unsigned int DataType,int iMachineNo,char* UniqueCmd, void* qbuf,int iSize, unsigned int DataFrom,int iResult,int DisplayFlag, int Level,long TransThread){ st_nodeinfo st; memset(&st,0x00,sizeof(st_nodeinfo)); if(DestPid==0) return 0; st.mtype=DestPid;st.requestid=getpid();st.m_CurrentThread=DestThread;st.m_DataType=DataType; st.m_DataFrom=DataFrom;st.m_iResult=iResult;st.m_DisplayFlag=DisplayFlag;st.m_MachineNo=iMachineNo; st.m_Level=Level;st.m_TransThread=TransThread; strcpy(st.m_UniqueCmd,UniqueCmd); if(qbuf&&iSize>0) { char* buff=new char[iSize];memset(buff,0x00,iSize); memcpy(buff,qbuf,iSize); st.m_SegmentPid=(long)buff; st.m_iSize=iSize; } CDataNode* pNode=new CDataNode(); memcpy(&pNode->m_nodeinfo,&st,sizeof(st_nodeinfo)); m_SendNode.append(pNode); //通知发送线程有数据需要发送 m_NoticSendLock.unlock(); return 1;}bool CNodeManage :: AddSendDataNode(CDataNode* ppNode){ m_SendNode.append(ppNode); //通知发送线程有数据需要发送 m_NoticSendLock.unlock(); return 1;}bool CNodeManage :: TransSendDataNode(CDataNode* ppNode){ CDataNode* pNode=new CDataNode(ppNode); m_SendNode.append(pNode); //通知发送线程有数据需要发送 m_NoticSendLock.unlock(); return 1;}CDataNode* CNodeManage :: FindSendDataNode(){ if(m_SendNode.count()>0) return m_SendNode.at(0); return NULL;}void CNodeManage :: DeleteSendDataNode(CDataNode* pNode){ if(!pNode) return; char* buff=NULL; if(pNode->m_nodeinfo.m_SegmentPid>0) { buff=(char*)pNode->m_nodeinfo.m_SegmentPid; if(buff) { delete [] buff;buff=NULL;pNode->m_nodeinfo.m_SegmentPid=0; } } m_SendNode.remove(pNode);}CPublicClass :: CPublicClass(){ m_UniqueId=0; m_Stop=false;m_OutToConsole=0; m_MsgQueueID[0]=0;m_isDebug=2; //key_t keyval=ftok(".",'a'); return;}CPublicClass :: ~CPublicClass(){ //删除消息队列 return;}void CPublicClass::MakeMessageQueue(){ //产生消息队列号 int makecount=0;CMessageQueue mq; for(int i=0;i<MESSAGEQUEUES;i++) { key_t keyval=ftok(".",'m'+i); m_MsgQueueID[i]=mq.Open_MessageQueue(keyval); while(m_MsgQueueID[i]<=0&&makecount<5) { mq.Remove_MessageQueue(m_MsgQueueID[i]); m_MsgQueueID[i]=mq.Open_MessageQueue(keyval); makecount++; } }}QString CPublicClass :: GetNewRecordIndex(QString sHeader){ QString s1,tmps,currForward; if(sHeader=="") { sHeader=m_ClassFlag; } QString strHeader="000000"+sHeader;strHeader=strHeader.right(6); currForward.sprintf("%s%03d%s",strHeader.data(),m_StationNo, getTimeStr()); if(currForward!=m_ForwardStr) m_UniqueId=0; m_UniqueId++; s1.sprintf("%s%04d",currForward.data(),(int)m_UniqueId); m_ForwardStr=currForward; return s1;}QString CPublicClass :: GetWorkPath(){ QString s; //s=QDir::currentDirPath(); return getenv("PWD"); return s;}QString CPublicClass :: GetWorkPath(QString ModuleName){ QString s; s.sprintf("%s",getenv("PWD"));s=s.stripWhiteSpace(); //使用Ps QString cmd; cmd.sprintf("ps -ef|grep %s >tempfile",ModuleName.data());system(cmd.data()); QFile f("tempfile"); bool b=f.open(IO_ReadOnly); if(!b) return s; char buf[1024]; f.readLine(buf,1024);f.close();f.remove();cmd.sprintf("%s",buf); //查找"./" int index0=cmd.find("./",0); if(index0>=0) { s.sprintf("%s",getenv("PWD"));s=s.stripWhiteSpace();return s; } index0=cmd.find("pts/",0);if(index0<0) index0=0; int index1=cmd.find("/",index0+1);int index2=cmd.findRev("/",cmd.length()); if(index1<0||index2<0||index1==index2) return "/root"; s=cmd.mid(index1,index2-index1); printf("work:%s\n",s.data()); return s;}int CPublicClass ::GetPIDbyModulName(QString ModulName){ FILE *f;char buf[1024];QString s; s.sprintf("ps -e|grep '%s'",ModulName.data()); f = fopen(s.data(),"r"); s.sprintf("%s",fgets(buf,1024,f)); s=s.stripWhiteSpace(); pclose(f); int index=s.find(" ",0); if(index<0) return -1; s=s.mid(0,index); return s.toInt();}bool CPublicClass::GetConfigFileInfo(QString FileName){ CXMLReader xmlreader((GetWorkPath()+"/"+FileName).data()); bool b=xmlreader.OpenDomXMLFile(); if(!b) { printf("缺少子站配置文件 %s......\n",(GetWorkPath()+"/"+FileName).data());return false; } if(xmlreader.GetSomeNode("body","name","uniquecode")) m_UniqueCode = xmlreader.GetCurrentNodeAttribValue("value"); if(xmlreader.GetSomeNode("body","name","substationcode")) m_StationNo = atol( xmlreader.GetCurrentNodeAttribValue("value") ); if(xmlreader.GetSomeNode("body","name","databaseserver")) m_pghost.sprintf("%s",xmlreader.GetCurrentNodeAttribValue("value")); if(xmlreader.GetSomeNode("body","name","databasename")) m_dbname.sprintf("%s",xmlreader.GetCurrentNodeAttribValue("value")); if(xmlreader.GetSomeNode("body","name","databaseuser")) m_dbuser.sprintf("%s",xmlreader.GetCurrentNodeAttribValue("value")); if(xmlreader.GetSomeNode("body","name","databasepass")) m_dbpass.sprintf("%s",xmlreader.GetCurrentNodeAttribValue("value")); //创建必需的目录 QString tmps=GetWorkPath()+"/data"; mkdir(tmps.data(),0666); tmps=GetWorkPath()+"/data/srcdata"; mkdir(tmps.data(),0666); tmps=GetWorkPath()+"/data/tmpdata"; mkdir(tmps.data(),0666); tmps=GetWorkPath()+"/Module"; mkdir(tmps.data(),0666); tmps=GetWorkPath()+"/devconfig"; mkdir(tmps.data(),0666); return true;}//////////////////////////启动指定的模块进程///////////////////////////////////////////////////bool CPublicClass::StartSomeDevModule(QString ModulePath,QString ModuleName){ QString sModuleName; if(ModulePath=="") { sModuleName=GetWorkPath()+"/Module/"+ModuleName; } else { sModuleName=ModulePath+"/"+ModuleName; } //检查模块是否存在 printf("ModuleName:%s\n",sModuleName.data()); pid_t child; if((child=fork())==-1) { return false; } else if(child==0) execl(sModuleName.data(),ModuleName.data(),"-r","-d",NULL); else { return true; } return true;}CXMLReader* CPublicClass::FindXmlFile(QString szFileName){ CXMLReader* pxml = NULL; for (int i=0; i<(int)m_XmlList.count(); i++) { pxml = m_XmlList.at(i); if (0 == pxml->m_strFileName.compare(szFileName.data()))// == szFileName) { return pxml; } } pxml = new CXMLReader(szFileName.data()); if (!pxml->OpenDomXMLFile()) { delete pxml; pxml = NULL; return NULL; } m_XmlList.append(pxml); return pxml;}bool CPublicClass :: AnylizeParam(QString moduleName,/*QApplication &a,*/int argc, char ** argv){ printf("#######################################:%s\n","333"); //解析模块名称参数 int mi=_CheckParamWild(argc,argv,"-module"); //检查模块名称参数 if(mi<0) //没有带模块参数 { m_ModuleName=moduleName.right(moduleName.length()-moduleName.findRev('/')-1);//a.name(); } else { QString s=QString(argv[mi]); int in=s.find("=",0); if(in<0) { printf("非法的模块名称:-module=<模块名称>");_DisplayHelp();return 0; } m_ModuleName=s.mid(in+1).stripWhiteSpace(); m_ModulePath=_GetFileAbsPath(m_ModuleName); m_ModuleName=_GetFileName(m_ModuleName); } if(m_ModuleName=="") {_DisplayHelp(); return 0;} //检查模块是否已经启动 if(_CheckModuleRun(m_ModuleName)) { printf("模块%s已经运行!\n",m_ModuleName.data());abort(); } //解析trace参数 mi=_CheckParamWild(argc,argv,"-trace"); if(mi<0) //没有调试参数 { memset(&m_MonitorData,0x00,sizeof(st_monitorsrc)); } else { QString s=QString(argv[mi]); int in=s.find("=",0); if(in<0) { memset(&m_MonitorData,0x00,sizeof(st_monitorsrc)); } else { s=s.mid(in+1).stripWhiteSpace(); GetTraceParam(s); } } //解析Debug参数 mi=_CheckParamWild(argc,argv,"-debug"); if(mi<0) //没有调试参数 { m_isDebug=0; } else { m_isDebug=1; QString s=QString(argv[mi]); int in=s.find("=",0); if(in<0) { m_OutToConsole=3;m_DebugFile=GetDataFileString(); } else { s=s.mid(in+1).stripWhiteSpace(); int index=s.find("+",0); if(index<0) { if(s=="auto") { m_DebugFile=GetDataFileString(); m_OutToConsole=1; } else if(s=="console") { m_DebugFile=""; m_OutToConsole=2; } } else { QString s1=s.mid(0,index); QString s2=s.mid(index+1); m_OutToConsole=0; if(s1=="auto"||s2=="auto") { m_DebugFile=GetDataFileString(); m_OutToConsole++; } if(s1=="console"||s2=="console") { m_OutToConsole=+2; } if(s1!="auto"&&s1!="console") { m_DebugFile=s1; } if(s2!="auto"&&s2!="console") { m_DebugFile=s2; } if(m_DebugFile!="") m_OutToConsole++; } } } return true;}QString CPublicClass :: GetDataFileString(){ QString Path=GetWorkPath()+"/data/"+m_ModuleName; mkdir(Path.data(),0666); QString Name;Name.sprintf("%s/%sData%0s",Path.data(),m_ModuleName.data(), getTimeStr()); Name+=".txt"; return Name;}void CPublicClass :: FillMachineNo(QString sMach){ int i=sMach.find("+",0); if(i<0) m_MonitorData.m_MachineNo[0]=sMach.mid(0).toInt(); else { m_MonitorData.m_MachineNo[0]=sMach.mid(0,i).toInt(); for(int j=1;j<5;j++) { int index=sMach.find("+",i+1); if(index<=i+1) { m_MonitorData.m_MachineNo[j]=sMach.mid(i+1).toInt(); break; } m_MonitorData.m_MachineNo[j]=sMach.mid(i+1,index-i-1).toInt(); i=index; } }}//(201,11111,10000)void CPublicClass :: GetTraceParam(QString Param){ int i=Param.find(","); if(i<0) { memset(&m_MonitorData,0x00,sizeof(st_monitorsrc)); FillMachineNo(Param); m_MonitorData.m_SendFlag=1;m_MonitorData.m_RecvFlag=1; } else { FillMachineNo(Param.mid(0,i)); if(Param.mid(i+1)=="recv") { m_MonitorData.m_SendFlag=0;m_MonitorData.m_RecvFlag=1; } else if(Param.mid(i+1)=="send") { m_MonitorData.m_SendFlag=1;m_MonitorData.m_RecvFlag=0; } else { m_MonitorData.m_SendFlag=1;m_MonitorData.m_RecvFlag=1; } }}bool CPublicClass::isTraceMachine(int MachineNo){ bool bfind=false; for(int i=0;i<5;i++) { if(m_MonitorData.m_MachineNo[i]==0) break; if(m_MonitorData.m_MachineNo[i]==MachineNo) { bfind=true;break; } } return bfind;}bool CPublicClass::OutDataToConsole(int MachineNo,QString MachineName,unsigned char* buffer,long len,int SRFlag){ //如果不是监视设备则不处理 if(!isTraceMachine(MachineNo)) return false; if (SRFlag==0&&m_MonitorData.m_SendFlag==0) return false; if (SRFlag==1&&m_MonitorData.m_RecvFlag==0) return false; QString prifix="RECV"; if(SRFlag==0) prifix="SEND"; //加锁 CLMutexLocker(&m_OutLock,true); QString ds=getTimeStr(); QString tmps="",msg=""; msg.sprintf("[%s-%d(%s) %s %s(%04d)]", m_ModuleName.data(), MachineNo,MachineName.data(), ds.data(), prifix.data(), (int)len); printf("%s",msg.data()); for(int i=0;i<len;i++) { printf("%02X ",buffer[i]); } printf("\n"); return true;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -