|
@@ -14,6 +14,7 @@
|
|
|
|
|
|
#include "procsm_if.h"
|
|
|
|
|
|
+#include "ivstdcolorout.h"
|
|
|
|
|
|
//#define RESET "\033[0m"
|
|
|
//#define BLACK "\033[30m" /* Black */
|
|
@@ -162,140 +163,14 @@ procsm::procsm(const char * strsmname,const unsigned int nBufSize,const unsigned
|
|
|
#endif
|
|
|
#endif
|
|
|
|
|
|
- bool bAttach= true;
|
|
|
-// AttachThread AT(mpASM,bAttach);
|
|
|
-// AT.start();
|
|
|
-// QTime xTime;
|
|
|
-// xTime.start();
|
|
|
-// while(xTime.elapsed()<100)
|
|
|
-// {
|
|
|
-// if(AT.mbrun == false)
|
|
|
-// {
|
|
|
-// bAttach = AT.mbAttach;
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// }
|
|
|
-// // qDebug("time is %d",xTime.elapsed());
|
|
|
-// if(xTime.elapsed()>= 1000)
|
|
|
-// {
|
|
|
-// qDebug("in 1000ms Attach fail.terminate it .");
|
|
|
-// AT.terminate();
|
|
|
-// bAttach = false;
|
|
|
-// }
|
|
|
-
|
|
|
- // if(!mpASM->attach())
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- bool bares = mpASM->create(sizeof(procsm_info)+nMaxPacCount*sizeof(procsm_head) + nBufSize);
|
|
|
- if(bares == false) //Exist.
|
|
|
+ int nrtn = CreateAndAttachASM(strasmname,nBufSize,nMaxPacCount,strsmname);
|
|
|
+ if(nrtn <0 )
|
|
|
{
|
|
|
- bAttach = mpASM->attach();
|
|
|
-
|
|
|
- if(bAttach)
|
|
|
- {
|
|
|
- char * p = (char *)mpASM->data();
|
|
|
- if(p == NULL)
|
|
|
- {
|
|
|
- qDebug("Create SharedMemory Fail.");
|
|
|
- return;
|
|
|
- }
|
|
|
- mpinfo = (procsm_info *)p;
|
|
|
- mphead = (procsm_head *)(p+sizeof(procsm_info));
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- std::cout<<" Exist,But Fail Attach. Recreate "<<std::endl;
|
|
|
- qint64 uptime = std::chrono::system_clock::now().time_since_epoch().count();
|
|
|
- snprintf(strasmname,256,"%s_%lld",strsmname,uptime);
|
|
|
- mpASMPtr->lock();
|
|
|
- ASM_PTR * pasm = (ASM_PTR *)mpASMPtr->data();
|
|
|
- pasm->mnshmsize = sizeof(procsm_info)+nMaxPacCount*sizeof(procsm_head) + nBufSize;
|
|
|
- pasm->mnUpdateTime = uptime;
|
|
|
- strncpy(pasm->mstrshmname,strasmname,256);
|
|
|
- mpASMPtr->unlock();
|
|
|
- bool bRecreate = mpASM->create(sizeof(procsm_info)+nMaxPacCount*sizeof(procsm_head) + nBufSize);
|
|
|
- if(bRecreate)
|
|
|
- {
|
|
|
- char * p = (char *)mpASM->data();
|
|
|
- if(p == NULL)
|
|
|
- {
|
|
|
- qDebug("Create SharedMemory Fail.");
|
|
|
- return;
|
|
|
- }
|
|
|
- mpASM->lock();
|
|
|
- mpinfo = (procsm_info *)p;
|
|
|
- mphead = (procsm_head *)(p+sizeof(procsm_info));
|
|
|
- mpinfo->mCap = nMaxPacCount;
|
|
|
- mpinfo->mnBufSize = nBufSize;
|
|
|
- mpinfo->mFirst = 0;
|
|
|
- mpinfo->mNext = 0;
|
|
|
- mpinfo->mLock = 0;
|
|
|
- mpASM->unlock();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- std::cout<<" Recreate Fail. Need Exit Program."<<std::endl;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- char * p = (char *)mpASM->data();
|
|
|
- if(p == NULL)
|
|
|
- {
|
|
|
- qDebug("Create SharedMemory Fail.");
|
|
|
- return;
|
|
|
- }
|
|
|
- mpASM->lock();
|
|
|
- mpinfo = (procsm_info *)p;
|
|
|
- mphead = (procsm_head *)(p+sizeof(procsm_info));
|
|
|
- mpinfo->mCap = nMaxPacCount;
|
|
|
- mpinfo->mnBufSize = nBufSize;
|
|
|
- mpinfo->mFirst = 0;
|
|
|
- mpinfo->mNext = 0;
|
|
|
- mpinfo->mLock = 0;
|
|
|
- mpASM->unlock();
|
|
|
+ char strerr[256];
|
|
|
+ snprintf(strerr,256,"CreateAndAttachASMFail. error code: %d",nrtn);
|
|
|
+ ivstdcolorout(strerr,iv::STDCOLOR_BOLDRED);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- if(mpASM->isAttached())
|
|
|
- {
|
|
|
-
|
|
|
- mbAttach = true;
|
|
|
- char * p = (char *)mpASM->data();
|
|
|
- mpinfo = (procsm_info *)p;
|
|
|
- mphead = (procsm_head *)(p+sizeof(procsm_info));
|
|
|
- mpASM->lock();
|
|
|
- mnMaxPacCount = mpinfo->mCap;
|
|
|
- mnBufSize = mpinfo->mnBufSize;
|
|
|
- mpASM->unlock();
|
|
|
- mstrtem = new char[mnBufSize];
|
|
|
-
|
|
|
-#ifndef USE_GROUPUDP
|
|
|
-#ifdef USEDBUS
|
|
|
- mmsgres = QDBusMessage::createSignal("/catarc/adc", "adciv.interface", "modulemsgres");
|
|
|
- mmsgres<<1;
|
|
|
-
|
|
|
- bool bconnect = QDBusConnection::sessionBus().connect(QString(),"/catarc/adc", "adciv.interface", "modulemsgquery",this,SLOT(onQuery()));
|
|
|
- if(bconnect == false)
|
|
|
- {
|
|
|
- std::cout<<"procsm_if_readthread::procsm_if_readthread bconect is false"<<std::endl;
|
|
|
- }
|
|
|
-#endif
|
|
|
-#endif
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- mbAttach = false;
|
|
|
- qDebug("Share Memory Error.");
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
|
|
|
mbInitComplete = true;
|
|
@@ -381,11 +256,137 @@ int procsm::CreateASMPTR(char * strasmname,const unsigned int nBufSize,const uns
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+int procsm::CreateAndAttachASM(char * strasmname,const unsigned int nBufSize,const unsigned int nMaxPacCount,const char * strsmname)
|
|
|
+{
|
|
|
+
|
|
|
+ bool bAttach= true;
|
|
|
+ std::string strout;
|
|
|
+
|
|
|
+ bool bares = mpASM->create(sizeof(procsm_info)+nMaxPacCount*sizeof(procsm_head) + nBufSize);
|
|
|
+ if(bares == false) //Exist.
|
|
|
+ {
|
|
|
+ strout = strsmname ;
|
|
|
+ strout = strout + " is Exist.";
|
|
|
+ ivstdcolorout(strout);
|
|
|
+ bAttach = mpASM->attach();
|
|
|
+
|
|
|
+ if(bAttach)
|
|
|
+ {
|
|
|
+ char * p = (char *)mpASM->data();
|
|
|
+ if(p == NULL)
|
|
|
+ {
|
|
|
+ strout = "Fatal Error: Create " + std::string(strsmname) + " Fail. data is NULL";
|
|
|
+ ivstdcolorout(strout,iv::STDCOLOR_BOLDRED);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ mpinfo = (procsm_info *)p;
|
|
|
+ mphead = (procsm_head *)(p+sizeof(procsm_info));
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ std::cout<<" Exist,But Fail Attach. Recreate "<<std::endl;
|
|
|
+ qint64 uptime = std::chrono::system_clock::now().time_since_epoch().count();
|
|
|
+ snprintf(strasmname,256,"%s_%lld",strsmname,uptime);
|
|
|
+ mpASMPtr->lock();
|
|
|
+ ASM_PTR * pasm = (ASM_PTR *)mpASMPtr->data();
|
|
|
+ pasm->mnshmsize = sizeof(procsm_info)+nMaxPacCount*sizeof(procsm_head) + nBufSize;
|
|
|
+ pasm->mnUpdateTime = uptime;
|
|
|
+ strncpy(pasm->mstrshmname,strasmname,256);
|
|
|
+ mpASMPtr->unlock();
|
|
|
+ bool bRecreate = mpASM->create(sizeof(procsm_info)+nMaxPacCount*sizeof(procsm_head) + nBufSize);
|
|
|
+ if(bRecreate)
|
|
|
+ {
|
|
|
+ char * p = (char *)mpASM->data();
|
|
|
+ if(p == NULL)
|
|
|
+ {
|
|
|
+ strout = "Fatal Error: ReCreate " + std::string(strsmname) + " Fail. data is NULL";
|
|
|
+ ivstdcolorout(strout,iv::STDCOLOR_BOLDRED);
|
|
|
+ return -2;
|
|
|
+ }
|
|
|
+ mpASM->lock();
|
|
|
+ mpinfo = (procsm_info *)p;
|
|
|
+ mphead = (procsm_head *)(p+sizeof(procsm_info));
|
|
|
+ mpinfo->mCap = nMaxPacCount;
|
|
|
+ mpinfo->mnBufSize = nBufSize;
|
|
|
+ mpinfo->mFirst = 0;
|
|
|
+ mpinfo->mNext = 0;
|
|
|
+ mpinfo->mLock = 0;
|
|
|
+ mpASM->unlock();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ strout = "Fatal Error: ReCreate " + std::string(strsmname) + " Fail.";
|
|
|
+ ivstdcolorout(strout,iv::STDCOLOR_BOLDRED);
|
|
|
+ return -5;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ char * p = (char *)mpASM->data();
|
|
|
+ if(p == NULL)
|
|
|
+ {
|
|
|
+ strout = "Fatal Error.Create SharedMemory Fail. " + std::string(strsmname) + " not exist. successfully create it, but data is NULL";
|
|
|
+ ivstdcolorout(strout,iv::STDCOLOR_BOLDRED);
|
|
|
+ return -3;
|
|
|
+ }
|
|
|
+ mpASM->lock();
|
|
|
+ mpinfo = (procsm_info *)p;
|
|
|
+ mphead = (procsm_head *)(p+sizeof(procsm_info));
|
|
|
+ mpinfo->mCap = nMaxPacCount;
|
|
|
+ mpinfo->mnBufSize = nBufSize;
|
|
|
+ mpinfo->mFirst = 0;
|
|
|
+ mpinfo->mNext = 0;
|
|
|
+ mpinfo->mLock = 0;
|
|
|
+ mpASM->unlock();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if(mpASM->isAttached())
|
|
|
+ {
|
|
|
+
|
|
|
+ mbAttach = true;
|
|
|
+ char * p = (char *)mpASM->data();
|
|
|
+ mpinfo = (procsm_info *)p;
|
|
|
+ mphead = (procsm_head *)(p+sizeof(procsm_info));
|
|
|
+ mpASM->lock();
|
|
|
+ mnMaxPacCount = mpinfo->mCap;
|
|
|
+ mnBufSize = mpinfo->mnBufSize;
|
|
|
+ mpASM->unlock();
|
|
|
+ mstrtem = new char[mnBufSize];
|
|
|
+
|
|
|
+#ifndef USE_GROUPUDP
|
|
|
+#ifdef USEDBUS
|
|
|
+ mmsgres = QDBusMessage::createSignal("/catarc/adc", "adciv.interface", "modulemsgres");
|
|
|
+ mmsgres<<1;
|
|
|
+
|
|
|
+ bool bconnect = QDBusConnection::sessionBus().connect(QString(),"/catarc/adc", "adciv.interface", "modulemsgquery",this,SLOT(onQuery()));
|
|
|
+ if(bconnect == false)
|
|
|
+ {
|
|
|
+ std::cout<<"procsm_if_readthread::procsm_if_readthread bconect is false"<<std::endl;
|
|
|
+ }
|
|
|
+#endif
|
|
|
+#endif
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ mbAttach = false;
|
|
|
+ strout = "Fatal Error.Create SharedMemory Fail. " + std::string(strsmname) + " Attach Fail.";
|
|
|
+ ivstdcolorout(strout,iv::STDCOLOR_BOLDRED);
|
|
|
+ return -4;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
void procsm::recreateasm(int nbufsize)
|
|
|
{
|
|
|
|
|
|
mpASMPtr->lock();
|
|
|
- qDebug("recreate asms");
|
|
|
+ ivstdcolorout("recreate " + std::string(mstrsmname) + " new buffe size is " + QString::number(nbufsize).toStdString() ,iv::STDCOLOR_GREEN);
|
|
|
|
|
|
|
|
|
mnBufSize = std::max(nbufsize*11/10,nbufsize+1000);
|
|
@@ -409,7 +410,10 @@ void procsm::recreateasm(int nbufsize)
|
|
|
mpASM->unlock();
|
|
|
mpASM->detach();
|
|
|
|
|
|
- qDebug("new asm name is %s,buffer size is %d ",mASM_State.mstrshmname,mnBufSize);
|
|
|
+ char strout[300];
|
|
|
+ snprintf(strout,300,"new asm name is %s,buffer size is %d ",mASM_State.mstrshmname,mnBufSize);
|
|
|
+ ivstdcolorout(strout,iv::STDCOLOR_GREEN);
|
|
|
+// qDebug("new asm name is %s,buffer size is %d ",mASM_State.mstrshmname,mnBufSize);
|
|
|
mpASM = new QSharedMemory(mASM_State.mstrshmname);
|
|
|
|
|
|
bool bAttach = false;
|