⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flwparser.cpp

📁 flwscript解析器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	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 + -