📄 awflow.cpp
字号:
{
CResDistrabutor * pDistr=(CResDistrabutor * )(int)pdwCommandList[1];
if(pDistr->IsValid()){
pdwCommandList[0]=1;
pDistr->AddRes((DWORD)pdwCommandList[1],(LPCTSTR)pdwCommandList[2],(DWORD)pdwCommandList[3],(DWORD)pdwCommandList[4],(DWORD)pdwCommandList[5]);
}
}
break;
case APIBUSFreeRes ://0x00f2000f //int obj,int dwResKey
{
CResDistrabutor * pDistr=(CResDistrabutor * )(int)pdwCommandList[1];
if(!pDistr->IsValid()){
m_iErrorCode=-1;
return SetContinue();
}
m_iErrorCode=0;
CUniMsg um;
um.SetMessage(NULL,pDistr,CMD_FREE_RES,MSG_COMMAND);
um.Add(pdwCommandList[2]);
COMMANDRESULT ret=SetPause(APIBUSFreeRes);
SendMsg(m_dwFlowCommadnIDent,&um,3,NULL,-1);
return ret;
}
break;
case APIBUSLockRes ://0x00f20010 //int obj,int dwResKey
{
CResDistrabutor * pDistr=(CResDistrabutor * )(int)pdwCommandList[1];
if(!pDistr->IsValid()){
m_iErrorCode=-1;
return SetContinue();
}
m_iErrorCode=0;
CUniMsg um;
um.SetMessage(NULL,pDistr,CMD_LOCK_RES,MSG_COMMAND);
um.Add(pdwCommandList[2]);
COMMANDRESULT ret=SetPause(APIBUSLockRes);
SendMsg(m_dwFlowCommadnIDent,&um,3,NULL,-1);
return ret;
}
break;
case APIBUSApplyResbySkill ://0x00f20011 //int obj,int dwNeedKey1,int dwNeedKey2,int dwType,string szFeature,RGT int dwRight=0
{
CResDistrabutor * pDistr=(CResDistrabutor * )(int)pdwCommandList[1];
if(!pDistr->IsValid()){
m_iErrorCode=-1;
return SetContinue();
}
int iMod=(int)pdwCommandList[6];
m_iErrorCode=0;
switch(iMod){
case 0:
{
CUniMsg um;
um.SetMessage(NULL,pDistr,CMD_APPLY_RES,MSG_COMMAND);
um.Add(pdwCommandList[1]);
um.Add(pdwCommandList[2]);
um.Add(pdwCommandList[3]);
um.Add(pdwCommandList[4]);
um.Add(pdwCommandList[5]);
COMMANDRESULT ret=SetPause(APIBUSApplyResbyGroup);
SendMsg(m_dwFlowCommadnIDent,&um,3,NULL,-1);
return ret;
}
break;
case 1:
{
CUniMsg um;
um.SetMessage(NULL,pDistr,CMD_APPLY_RES,MSG_COMMAND);
um.Add(pdwCommandList[1]);
um.Add(pdwCommandList[2]);
um.Add(pdwCommandList[3]);
um.Add(pdwCommandList[4]);
um.Add(pdwCommandList[5]);
SendMsg(&um,3,NULL,-1);
return SetContinue();
}
break;
case 2:
{
pdwCommandList[0]=(int)m_pBus->SynDistributorTask(pdwCommandList[0],pdwCommandList[4],(DWORD)pdwCommandList[3]);
return SetContinue();
}
break;
default:
break;
}
}
break;
case APIBUSApplyResbyGroup ://0x00f20012 //int obj,int dwNeedKey1,int dwNeedKey2,int dwType,int igroupid,RGT int dwRight=0
{
CResDistrabutor * pDistr=(CResDistrabutor * )(int)pdwCommandList[1];
if(!pDistr->IsValid()){
m_iErrorCode=-1;
return SetContinue();
}
int iMod=(int)pdwCommandList[6];
m_iErrorCode=0;
switch(iMod){
case 0:
{
CUniMsg um;
um.SetMessage(NULL,pDistr,CMD_APPLY_RES,MSG_COMMAND);
um.Add(pdwCommandList[1]);
um.Add(pdwCommandList[2]);
um.Add(pdwCommandList[3]);
um.Add(pdwCommandList[4]);
um.Add(pdwCommandList[5]);
COMMANDRESULT ret=SetPause(APIBUSApplyResbyGroup);
SendMsg(m_dwFlowCommadnIDent,&um,3,NULL,-1);
return ret;
}
break;
case 1:
{
CUniMsg um;
um.SetMessage(NULL,pDistr,CMD_APPLY_RES,MSG_COMMAND);
um.Add(pdwCommandList[1]);
um.Add(pdwCommandList[2]);
um.Add(pdwCommandList[3]);
um.Add(pdwCommandList[4]);
um.Add(pdwCommandList[5]);
SendMsg(&um,3,NULL,-1);
return SetContinue();
}
break;
case 2:
{
pdwCommandList[0]=(int)m_pBus->SynDistributorTask(pdwCommandList[0],pdwCommandList[4],(DWORD)pdwCommandList[3]);
return SetContinue();
}
break;
default:
break;
}
}
break;
default:
m_pCmdExcutor=NULL;
GetExprObj(dwCommand,m_pCmdExcutor,m_dwExcuteModId);
if(m_pCmdExcutor){
m_dwCommandExcute=dwCommand;
COMMANDRESULT ret;//=SetPause(dwCommand);
if(m_dwExcuteModId==0||m_dwExcuteModId==GetModId()){
if(m_pCmdExcutor->IsValid()){
ret=m_pCmdExcutor->ExcuteDirect(dwCommand,(DWORD)(CAsynWorker *)this,0,iNum,pdwCommandList);
}
else{
ret=LINE_CONTINUE;
}
if(ret==LINE_CONTINUE){
SetContinue();
}
else{
SetPause(dwCommand);
}
return ret;
}
else{
m_iFlowTimeOutSec=5*300;
CUniMsg um;
um.SetMessage(GetModId(),m_dwExcuteModId,this,m_pCmdExcutor,EVT_EXCUTE_REMOTE,MSG_EVENT,UniVar(dwCommand),InValidVar);
for(int j=0;j<iNum;j++){
um.Add(pdwCommandList[j]);
}
m_pBus->SendMessage(&um);
ret=SetPause(dwCommand);
}
return ret;
}
else{
SetContinue();
return CBaseFlow::DefaultParse(dwCommand,pdwCommandList,iNum);
}
}
return SetContinue();
}
BOOL CAWFlow::GetVarValue(DWORD dwVarID,UniVar & tv)
{
switch(dwVarID){
case 0x00f10002:
tv=(int)SetDataCallBack;
return TRUE;
case 0x00f10001:
tv=(DWORD)((CAsynWorker * )this);
return TRUE;
case 0x00f10003:
if(m_pBus){
tv=m_pBus->m_unMod.dwModId;
}
return TRUE;
case 0x00f10004:
if(m_pBus){
tv=m_pBus->m_dwPudFlag;
}
return TRUE;
case 0x00f10005:
if(m_pBus){
tv=m_pBus->m_csName;
}
return TRUE;
default:
return CBaseFlow::GetVarValue(dwVarID,tv);
}
}
BOOL CAWFlow::SetVarValue(DWORD dwVarID,UniVar tv)
{
switch(dwVarID){
case 0x00f10003:
if(m_pBus){
m_pBus->m_unMod.dwModId=(DWORD)tv;
}
return TRUE;
case 0x00f10004:
if(m_pBus){
m_pBus->m_dwPudFlag=(DWORD)tv;
}
return TRUE;
case 0x00f10005:
if(m_pBus){
m_pBus->m_csName=(char *)tv;
if(!m_pBus->m_csName.IsEmpty())
m_pBus->AddStationName(m_pBus->m_unMod.dwModId,(LPSTR)(LPCTSTR)m_pBus->m_csName);
}
return TRUE;
default:
return CBaseFlow::SetVarValue(dwVarID,tv);
}
}
void CAWFlow::AddCommand(CUniMsg * pMsg,BOOL bRunDirect)
{
BOOL bRun=FALSE;
WaitForSingleObject(m_hMutex,1000);
try{
if(m_bNeedCommand){
if(m_pCurMsg)delete m_pCurMsg;
pMsg->m_iTimeStamp=GetTimeStamp();
m_pCurMsg=pMsg;
m_bNeedCommand=FALSE;
if(!bRunDirect){
FunctionRet(FALSE,
APIBUSGetCommand,
UniVar(m_pCurMsg->m_dwCommand),
UniVar((DWORD)m_pCurMsg->m_pSender),
UniVar((DWORD)m_pCurMsg->m_pReceivor),
InValidVar);
}
else{
bRun=TRUE;
}
}
else {
m_CommandList.Add(pMsg);
}
}
catch(...){
LogEvent(exceptionLog,0,0,"Add command error","except.txt");
}
ReleaseMutex(m_hMutex);
if(bRun){
FunctionRet(TRUE,
APIBUSGetCommand,
UniVar(m_pCurMsg->m_dwCommand),
UniVar((DWORD)m_pCurMsg->m_pSender),
UniVar((DWORD)m_pCurMsg->m_pReceivor),
InValidVar);
}
}
COMMANDRESULT CAWFlow::GetCommand(UniVar * pVar,int Allways)
{
COMMANDRESULT ret=LINE_PAUSE;
WaitForSingleObject(m_hMutex,1000);
try{
if(m_pCurMsg)delete m_pCurMsg;
m_pCurMsg=NULL;
if(m_CommandList.GetSize()){
m_pCurMsg=m_CommandList.GetAt(0);
m_CommandList.RemoveAt(0);
pVar[0]=UniVar((DWORD)m_pCurMsg->m_dwCommand);
pVar[1]=UniVar((DWORD)m_pCurMsg->m_pSender);
pVar[2]=UniVar((DWORD)m_pCurMsg->m_pReceivor);
ret=SetContinue();
m_bNeedCommand=FALSE;
}
else {
if(Allways){
pVar[0]=-1;
pVar[1]=-1;
pVar[2]=-1;
ret=SetContinue();
m_bNeedCommand=FALSE;
}
else m_bNeedCommand=TRUE;
}
}
catch(...){
LogEvent(exceptionLog,0,0,"Get command error","except.txt");
}
ReleaseMutex(m_hMutex);
if(ret==LINE_PAUSE)return SetPause(APIBUSGetCommand);
else return ret;
}
int CAWFlow::FunctionRet(BOOL bRunDirect,DWORD dwPauseCommand,UniVar * pVar,int Num)
{
if(m_dwPauseCommand==0xffffffff)return 0;
if(dwPauseCommand!=m_dwPauseCommand){
if(dwPauseCommand!=APIBUSSetTimeOut)
return 0;
else {
m_dwPauseCommand=0xffffffff;
m_iErrorCode=-23001;//command TIMEOUT
if(!bRunDirect)
return Resume();
else{
SafeRun();
return 1;
}
}
}
else {
m_dwPauseCommand=0xffffffff;
if(m_iFlowTimeOutSec>0){
m_iFlowTimeOutSec=0;
CancelTime(FlowCmdTimerSet);
}
for(int i=0;i<Num;i++){
RestoreCurrentParam(pVar[i],i);
}
if(!bRunDirect)
return Resume();
else{
SafeRun();
return 1;
}
}
};
int CAWFlow::FunctionRet(BOOL bRunDirect,DWORD dwPauseCommand,UniVar uvi,...)
{
if(m_dwPauseCommand==0xffffffff)
return 0;
if(dwPauseCommand!=m_dwPauseCommand){
if(dwPauseCommand!=APIBUSSetTimeOut)
return 0;
else {
m_dwPauseCommand=0xffffffff;
m_iErrorCode=-23001;//command TIMEOUT
if(!bRunDirect)
return Resume();
else{
SafeRun();
return 1;
}
}
}
else {
m_dwPauseCommand=0xffffffff;
if(m_iFlowTimeOutSec>0){
m_iFlowTimeOutSec=0;
CancelTime(FlowCmdTimerSet);
}
if(!UniVar::ValidVar(&uvi)){
if(!bRunDirect)
return Resume();
else{
SafeRun();
return 1;
}
}
RestoreCurrentParam(uvi,0);
va_list varl;
va_start(varl,uvi);
UniVar uv;
int i=1;
while(1){
uv=va_arg(varl,UniVar);
if(UniVar::ValidVar(&uv)){
RestoreCurrentParam(uv,i);
i++;
}
else break;
};
va_end(varl);
if(!bRunDirect)
return Resume();
else{
SafeRun();
return 1;
}
}
}
void CAWFlow::AddCommand(BOOL bRunDirect,DWORD dwCommand,DWORD dwObject,DWORD dwType,DWORD sendMode,DWORD dwIdent,int Num,UniVar * pTV)
{
CUniMsg * pUm=new CUniMsg;
for(int i=0;i<Num;i++)
pUm->Add(pTV[i]);
pUm->m_dwIdent=dwIdent;
*((DWORD *)&pUm->m_pReceivor)=dwType;
pUm->m_dwCommand=dwCommand;
*((DWORD *)&pUm->m_pSender)=dwObject;
pUm->m_dwSendMode=sendMode;
AddCommand(pUm,bRunDirect);
}
void CAWFlow::AddCommand(BOOL bRunDirect,DWORD dwCommand,DWORD dwObject,DWORD dwType,DWORD dwIdent,DWORD sendMode,UniVar uvi,...)
{
CUniMsg * pUm=new CUniMsg;
pUm->m_dwIdent=dwIdent;
if(UniVar::ValidVar(&uvi)){
pUm->Add(uvi);
va_list varl;
va_start(varl,uvi);
UniVar uv;
while(1){
uv=va_arg(varl,UniVar);
if(UniVar::ValidVar(&uv)){
pUm->Add(uv);
}
else break;
};
va_end(varl);
}
pUm->m_dwSendMode=sendMode;
*((DWORD *)&pUm->m_pReceivor)=dwType;
pUm->m_dwCommand=dwCommand;
*((DWORD *)&pUm->m_pSender)=dwObject;
AddCommand(pUm,bRunDirect);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -