📄 flwparser.cpp
字号:
if(fgets(linetemp,1024,fFlowFile))
{
//s2中保存为字符串的总数
sscanf(linetemp,"%s %s",s1,s2);
int n = atoi(s1);
if(n!=10003)
return LP_ERROR_READFLOWVERSION;
g_stCntInfo[nContNo].m_nStrC=atoi(s2);
}
if(fgets(linetemp,1024,fFlowFile))
{
//保存挂机处理流程行号
sscanf(linetemp,"%s %s",s1,s2);
int n = atoi(s1);
if(n!=10004)
return LP_ERROR_READFLOWVERSION;
g_stCntInfo[nContNo].m_nHangUpLine=atoi(s2);
}
if(fgets(linetemp,1024,fFlowFile))
{
//关键区域个数
sscanf(linetemp,"%s %s",s1,s2);
int n = atoi(s1);
if(n!=10005)
return LP_ERROR_READFLOWVERSION;
g_stCntInfo[nContNo].m_nSectionCount=atoi(s2);
}
if(fgets(linetemp,1024,fFlowFile))
{
//关键区域个数
sscanf(linetemp,"%s %s",s1,s2);
int n = atoi(s1);
if(n!=10006)
return LP_ERROR_READFLOWVERSION;
g_stCntInfo[nContNo].m_nOnHookLine=atoi(s2);
}
if(fgets(linetemp,1024,fFlowFile))
{
//关键区域个数
sscanf(linetemp,"%s %s",s1,s2);
int n = atoi(s1);
if(n!=10007)
return LP_ERROR_READFLOWVERSION;
g_stCntInfo[nContNo].m_nOffHookLine=atoi(s2);
}
if(fgets(linetemp,1024,fFlowFile))
{
//关键区域个数
sscanf(linetemp,"%s %s",s1,s2);
int n = atoi(s1);
if(n!=10008)
return LP_ERROR_READFLOWVERSION;
g_stCntInfo[nContNo].m_nUserHangUpLine=atoi(s2);
}
if(fgets(linetemp,1024,fFlowFile))
{
//关键区域个数
sscanf(linetemp,"%s %s",s1,s2);
int n = atoi(s1);
if(n!=10009)
return LP_ERROR_READFLOWVERSION;
g_stCntInfo[nContNo].m_nUserCallInLine=atoi(s2);
}
if(fgets(linetemp,1024,fFlowFile))
{
//关键区域个数
sscanf(linetemp,"%s %s",s1,s2);
int n = atoi(s1);
if(n!=10010)
return LP_ERROR_READFLOWVERSION;
g_stCntInfo[nContNo].m_nAgentDigitLine=atoi(s2);
}
if(fgets(linetemp,1024,fFlowFile))
{
//关键区域个数
sscanf(linetemp,"%s %s",s1,s2);
int n = atoi(s1);
if(n!=10011)
return LP_ERROR_READFLOWVERSION;
g_stCntInfo[nContNo].m_nAgentEventProcLine=atoi(s2);
}
if(fgets(linetemp,1024,fFlowFile))
{
//关键区域个数
sscanf(linetemp,"%s %s",s1,s2);
int n = atoi(s1);
if(n!=10012)
return LP_ERROR_READFLOWVERSION;
g_stCntInfo[nContNo].m_nWaitEventProcLine=atoi(s2);
// char szlog[1024];
// sprintf(szlog,"m_nWaitEventProcLine =%d ",m_nWaitEventProcLine);
// LogMesg(0,szlog,ERROROUTPUT,THIS_FILE, __LINE__);
}
if(fgets(linetemp,1024,fFlowFile))
{
//关键区域个数
sscanf(linetemp,"%s %s",s1,s2);
int n = atoi(s1);
if(n!=10013)
return LP_ERROR_READFLOWVERSION;
g_stCntInfo[nContNo].m_nInterServiceLine=atoi(s2);
// char szlog[1024];
// sprintf(szlog,"m_nWaitEventProcLine =%d ",m_nWaitEventProcLine);
// LogMesg(0,szlog,ERROROUTPUT,THIS_FILE, __LINE__);
}
g_stCntInfo[nContNo].m_pScript=new SCRIPTLINE[g_stCntInfo[nContNo].m_nMaxLine];
if( g_stCntInfo[nContNo].m_pScript==NULL)
{
//AfxMessageBox( "m_pScript==NULL");
fclose(fFlowFile);
return LP_ERROR_ALLOWMEM;
}
g_stCntInfo[nContNo].m_pSql=new SQLLINE[g_stCntInfo[nContNo].m_nStrC];
if( g_stCntInfo[nContNo].m_pSql==NULL)
{
//AfxMessageBox( "m_pSql==NULL");
fclose(fFlowFile);
return LP_ERROR_ALLOWMEM;
}
int nScriptItor = 0;
int nSqlItor = 0;
int nCmd=0;
while(1)
{
if(fgets(linetemp,1024,fFlowFile))
{
l=strlen(linetemp);
linetemp[l-1]='\0';
nCmd = GetCommand(linetemp);
sprintf(g_stCntInfo[nContNo].m_pScript[nScriptItor++].scriptline,"%s",linetemp);
if(STRC_PAM==nCmd)
{
if(fgets(linetemp,1024,fFlowFile))
{
l=strlen(linetemp);
linetemp[l-1]='\0';
}
else
{
break;
}
sprintf(g_stCntInfo[nContNo].m_pSql[nSqlItor++].sqlline,"%s",linetemp);
sprintf(g_stCntInfo[nContNo].m_pScript[nScriptItor++].scriptline,"%d",nSqlItor-1);
}
}
else
{
break;
}
}
if(nScriptItor+1!=g_stCntInfo[nContNo].m_nMaxLine)
{
return LP_ERROR_READFLOW;
//CString str;
//str.Format("nScriptItor:%d m_nMaxLine %d",nScriptItor,Cont[nContNo].m_nMaxLine);
//AfxMessageBox(str);
}
fclose(fFlowFile);
return nContNo;
}
void AddSysVarTable(int nIndex)
{
AddStringTable(nIndex,"$sys_caller");
AddStringTable(nIndex,"$sys_callee");
AddStringTable(nIndex,"$sys_dtmf");
AddIntTable(nIndex,"$sys_dialoutresult");
AddIntTable(nIndex,"$sys_channo");
AddIntTable(nIndex,"$sys_lineno");
AddIntTable(nIndex,"$sys_ipline");
AddIntTable(nIndex,"$sys_linestate");
AddIntTable(nIndex,"$sys_confno");
AddStringTable(nIndex,"$sys_agentid");
AddIntTable(nIndex,"$sys_agentlevel");
AddStringTable(nIndex,"$sys_usernum");
AddStringTable(nIndex,"$sysdb_callermobile");
AddStringTable(nIndex,"$sysdb_calledmobile");
AddIntTable(nIndex,"$sysdb_ordertype");
AddStringTable(nIndex,"$sysdb_songid");
AddStringTable(nIndex,"$sysdb_datetime");
AddStringTable(nIndex,"$sysdb_leaveword");
AddStringTable(nIndex,"$sysdb_smsmsg");
AddIntTable(nIndex,"$sysdb_dialcount");
AddIntTable(nIndex,"$sysdb_flag");
AddIntTable(nIndex,"$sysdb_sex");
AddStringTable(nIndex,"$sysdb_name");
AddStringTable(nIndex,"$sysdb_smscode");
AddIntTable(nIndex,"$sysdb_feevalue");
AddStringTable(nIndex,"$sysdb_smssender");
AddIntTable(nIndex,"$sysdb_exfeevalue");
AddStringTable(nIndex,"$sysdb_linkid");
AddStringTable(nIndex,"$sysdb_servicetype");
AddStringTable(nIndex,"$sysdb_exservicetype");
AddStringTable(nIndex,"$sysdb_companyid");
AddStringTable(nIndex,"$sysdb_subflow");
AddStringTable(nIndex,"$sysdb_accessno");
AddStringTable(nIndex,"$sysdb_privatedata");
AddIntTable(nIndex,"$sys_callintype");
AddStringTable(nIndex,"$sysdb_displaymobile");
AddStringTable(nIndex,"$sys_oricallee");
AddIntTable(nIndex,"$sys_sublevel");
AddIntTable(nIndex,"$sys_hangupcode");
g_pstChnInfo[nIndex].m_nPageStringCount = g_pstChnInfo[nIndex].m_iStringVarCount;
g_pstChnInfo[nIndex].m_nPageIntCount = g_pstChnInfo[nIndex].m_iIntVarCount;
}
int AddStringTable(int nIndex,char*s)
{
if(g_pstChnInfo[nIndex].m_iStringVarCount>=VARHEAPSIZE-1)
{
//LogMesg(nChan,"string var heap over",ERROROUTPUT,THIS_FILE, __LINE__);
return 0;
}
strcpy(g_pstChnInfo[nIndex].m_stVStringHeap[g_pstChnInfo[nIndex].m_iStringVarCount].string_name,s);
strcpy(g_pstChnInfo[nIndex].m_stVStringHeap[g_pstChnInfo[nIndex].m_iStringVarCount].string_value,"");
g_pstChnInfo[nIndex].m_stVStringHeap[g_pstChnInfo[nIndex].m_iStringVarCount].string_level=g_pstChnInfo[nIndex].m_iStringVarLevel;
g_pstChnInfo[nIndex].m_iStringVarCount++;
return 1;
}
int AddIntTable(int nIndex,char *s)
{
if(g_pstChnInfo[nIndex].m_iIntVarCount>=VARHEAPSIZE-1)
{
// LogMesg(nIndex,"Error : int var heap over",ERROROUTPUT,THIS_FILE, __LINE__);
return 0;
}
strcpy(g_pstChnInfo[nIndex].m_stVIntHeap[g_pstChnInfo[nIndex].m_iIntVarCount].int_name,s);
g_pstChnInfo[nIndex].m_stVIntHeap[g_pstChnInfo[nIndex].m_iIntVarCount].int_value = 0;
g_pstChnInfo[nIndex].m_stVIntHeap[g_pstChnInfo[nIndex].m_iIntVarCount].int_level=g_pstChnInfo[nIndex].m_iIntVarLevel;
g_pstChnInfo[nIndex].m_iIntVarCount++;
return 1;
}
FLWPARSER_API int FP_SetStringVarible(int nChnID,char* pVarName,char*pVarValue)
{
char szlog[1024];
int nIndex = ChnMapTable[nChnID].m_nIndex;
int i=0;
for(;i<g_pstChnInfo[nIndex].m_iStringVarCount;i++)
{
if(strcmp(g_pstChnInfo[nIndex].m_stVStringHeap[i].string_name,pVarName)==0)//found
{
sprintf(g_pstChnInfo[nIndex].m_stVStringHeap[i].string_value,"%s",pVarValue);
sprintf(szlog,"FP_SetStringVarible(%s,%s)",pVarName,pVarValue);
LogMesg(nIndex,szlog);
return 1;
}
}
return LP_ERROR_INVALIDVARIABLE;
}
FLWPARSER_API int FP_SetIntVarible(int nChnID,char* pVarName,int nVarValue)
{
int nIndex = ChnMapTable[nChnID].m_nIndex;
int i=0;
for(;i<g_pstChnInfo[nIndex].m_iIntVarCount;i++)
{
if(strcmp(g_pstChnInfo[nIndex].m_stVIntHeap[i].int_name,pVarName)==0)//found
{
g_pstChnInfo[nIndex].m_stVIntHeap[i].int_value = nVarValue;
return 1;
}
}
return LP_ERROR_INVALIDVARIABLE;
}
//此函数不是接口
void IncreaseVarHeap(int nChnID)
{
int nIndex = ChnMapTable[nChnID].m_nIndex;
g_pstChnInfo[nIndex].m_iStringVarLevel++;
g_pstChnInfo[nIndex].m_iIntVarLevel++;
}
//此函数不是接口
void DecreaseVarHeap(int nChnID)
{
int nIndex = ChnMapTable[nChnID].m_nIndex;
DropIntTable(nChnID);
DropStringTable(nChnID);
g_pstChnInfo[nIndex].m_iStringVarLevel--;
g_pstChnInfo[nIndex].m_iIntVarLevel--;
}
//此函数不是接口
void DropIntTable(int nChnID)
{
int i=0;
int nIndex = ChnMapTable[nChnID].m_nIndex;
int c = g_pstChnInfo[nIndex].m_iIntVarCount;
for(;i<c;i++)
{
if( g_pstChnInfo[nIndex].m_stVIntHeap[i].int_level>=g_pstChnInfo[nIndex].m_iIntVarLevel)
{
g_pstChnInfo[nIndex].m_iIntVarCount --;
g_pstChnInfo[nIndex].m_stVIntHeap[i].int_level = -1;
sprintf(g_pstChnInfo[nIndex].m_stVIntHeap[i].int_name,"%s","");
g_pstChnInfo[nIndex].m_stVIntHeap[i].int_value=-1;
}
}
}
void DropAllPageVar(int nChnID)
{
int nIndex = ChnMapTable[nChnID].m_nIndex;
g_pstChnInfo[nIndex].m_iIntVarLevel = 0;
g_pstChnInfo[nIndex].m_iIntVarCount = g_pstChnInfo[nIndex].m_nPageIntCount;
g_pstChnInfo[nIndex].m_iStringVarLevel = 0;
g_pstChnInfo[nIndex].m_iStringVarCount = g_pstChnInfo[nIndex].m_nPageStringCount;
g_pstChnInfo[nIndex].m_nInitOK = 0;
}
//此函数不是接口
void DropStringTable(int nChnID)
{
int nIndex = ChnMapTable[nChnID].m_nIndex;
int i=0;
int c = g_pstChnInfo[nIndex].m_iStringVarCount;
for(;i<c;i++)
{
if( g_pstChnInfo[nIndex].m_stVStringHeap[i].string_level>=g_pstChnInfo[nIndex].m_iStringVarLevel)
{
g_pstChnInfo[nIndex].m_iStringVarCount --;
g_pstChnInfo[nIndex].m_stVStringHeap[i].string_level = -1;
sprintf(g_pstChnInfo[nIndex].m_stVStringHeap[i].string_name,"%s","");
sprintf(g_pstChnInfo[nIndex].m_stVStringHeap[i].string_value,"%s","");
}
}
}
int CheckUpdateFile(int nFlwID,const char* szFile)
{
char szlog[1024];
HANDLE hFile = CreateFile(szFile, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, 0, NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
sprintf(szlog,"检测文件时,打开文件失败%s",szFile);
LogMesg(-1,szlog);
return 0;
}
FILETIME ftCreate, ftAccess, ftWrite;
SYSTEMTIME stUTC, stLocal;
DWORD dwRet;
// Retrieve the file times for the file.
if (!GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite))
{
CloseHandle(hFile);
sprintf(szlog,"检测文件时,获取文件时间失败%s",szFile);
LogMesg(-1,szlog);
return 0;
}
if(ftWrite.dwHighDateTime == g_stCntInfo[nFlwID].m_nHighTime&&ftWrite.dwLowDateTime==g_stCntInfo[nFlwID].m_nLowTime)
{
CloseHandle(hFile);
sprintf(szlog,"检测文件%s未更新",szFile);
LogMesg(-1,szlog);
return 0;
}
else
{
char szlog[1024];
sprintf(szlog,"检测到流程更新%s",szFile);
LogMesg(-1,szlog);
CloseHandle(hFile);
return 1;
}
}
char* GetLine(int nCntID,int nLinID,int nChnID)
{
char szlog[1024]="";
g_stCntInfo[nCntID].m_nCurLine = nLinID ;
if(nLinID<0||nLinID>g_stCntInfo[nCntID].m_nMaxLine)
{
sprintf(szlog,"nLinID%d Error",nLinID);
LogMesg(nCntID,szlog);
return NULL;
}
int i ;
char *p;
if(g_stCntInfo[nCntID].m_nStrCFlag==1)//上一行shi
{
i = atoi(g_stCntInfo[nCntID].m_pScript[nLinID].scriptline);
p = g_stCntInfo[nCntID].m_pSql[i].sqlline;
sprintf(szlog,"p=%s",p);
LogMesg(nChnID,szlog);
g_stCntInfo[nCntID].m_nStrCFlag = 0;
}
else
{
p = g_stCntInfo[nCntID].m_pScript[nLinID].scriptline;
int cmd = GetCommand(p);
if(cmd==STRC_PAM)
g_stCntInfo[nCntID].m_nStrCFlag=1;
else
g_stCntInfo[nCntID].m_nStrCFlag=0;
}
if(p==NULL)
{
sprintf(szlog,"nLinID%d=NULL",nLinID);
LogMesg(nChnID,szlog);
return NULL;
}
return p;
}
void OperateScript(int nChnID,int op)
{
if(op>20000&&op<60000)
{
InternalOperateKeyWords(nChnID,op);
return;
}
if(op>60000&&op<60010)
{
InternalOperateIFLFV(nChnID,op);
return;
}
if(op>60010&&op<60020)
{
InternalOperateIFRFV(nChnID,op);
return;
}
if(op>60020&&op<60030)
{
InternalOperateSFLFV(nChnID,op);
return;
}
if(op>60030&&op<60040)
{
InternalOperateSFRFV(nChnID,op);
return;
}
if(op>60040&&op<60050)
{
InternalOperateIFLVE(nChnID,op);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -