コード例 #1
0
ファイル: ChatCommand.cpp プロジェクト: iamnilay3/openlierox
///////////////////
// Common param check used in many cases
std::string CheckIDParams(const std::vector<std::string>& params, ChatCommand::tProcFunc_t func, /*out*/ int *id)
{
	*id = 0;

	// Param count
	ChatCommand *me = GetCommand(func);
	if (params.size() < me->iMinParamCount || params.size() > me->iMaxParamCount)
		return "Invalid parameter count";

	// ID presence check
	if (stringcasecmp(params[0], "id") != 0)
		return "Please specify a worm ID";

	// ID check
	if (!ConvertID(params[1], id))
		return "Invalid worm ID";

	return "";
}
コード例 #2
0
//----------------------------------------------------------------------------
//
//  Function:   ReadSmartDocList
//
//  Synopsis:   读入设备档案表
//
//  Arguments:  pSmartDoc -- 设备档案表
//				nRecCount -- 记录数
//
//  History:    2004-09-20   ZhangWei   Created
//
//  Notes:
//
//----------------------------------------------------------------------------
long __stdcall ReadSmartDocList(TSSmartDoc *pSmartDoc, long *nRecCount)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());

	ST_CPACK rpack;
	ST_CPACK apack;
	ST_PACK  apackarray[60];
	char buffer[20960];

	WriteLog("三九前置向金仕达调用功能号%d, 申请获取全部设备档案表\n", 930037);

	long k = 0 ;
	bool bEnd = false;
	int  nlen = 0 ;
	int  nRow = 0 ;
	int  nfirst = 1 ;
	int  nLen = sizeof(buffer);
	char omsg[256];
	ST_PACK *pPacket = NULL;

	HANDLE& hHandle = ConnectPool.Alloc();

#if __DEBUG_INTERFACE__
//#if 0
	while( !bEnd )
	{
		if( k >= MAX_SMART_DOC )
		{
			ConnectPool.Free(hHandle);
			WriteLog("设备档案数量大于%d, 请检查设备档案参数表!!!!\n", MAX_SMART_DOC);
			break;
		}

		memset(&rpack, 0, sizeof(rpack));

		rpack.head.RequestType = 930037; 
		rpack.head.recCount = 1;    /* 本包的记录数*/
		rpack.head.retCode = 0;     /* 返回代码*/
		rpack.head.userdata = 0;

		if( nfirst )
		{
			rpack.head.firstflag = 1;   /* 是否第一个请求(首包请求)*/
			rpack.head.nextflag = 0;    /* 是否后续包请求*/
			nfirst = 0 ;
		}
		else
		{
			rpack.head.firstflag = 0;   /* 是否第一个请求(首包请求)*/
			rpack.head.nextflag = 1;    /* 是否后续包请求*/
			memcpy(&rpack.head.hook,&apack.head.hook,sizeof(rpack.head.hook));
			rpack.head.hook.queuetype=apack.head.hook.queuetype;
		}

		SetValue(&rpack.head,&rpack.pack, F_SDATE1, "00000000");
		SetValue(&rpack.head,&rpack.pack, F_LCERT_CODE, GetValue(iSmartKey));	//前置机注册号
		SetValue(&rpack.head,&rpack.pack, F_SCUST_LIMIT2, sSmartKey);			//动态密钥

		nLen = sizeof(buffer);
		memset(buffer, 0, sizeof(buffer));

		if( !EncodeBuf(&rpack, (unsigned char*)buffer, &nLen, omsg) )
		{
			ConnectPool.Free(hHandle);
			WriteLog("执行功能号930037读入设备档案表时,运行EncodeBuf失败\n");
			return RET_SYSERROR;
		}
		printf("执行功能号930037读入设备档案表\n");
		if( SendData(hHandle, iServerNo, iFunc, (char*)buffer, nLen, 1, FALSE) != RET_OK )
		{
			ConnectPool.Free(hHandle);
			WriteLog("执行功能号930037读入设备档案表时,运行SendData失败\n");
			return RET_SYSERROR;
		}

		memset(buffer, 0, sizeof(buffer));

		nLen = sizeof(buffer);
		nlen = RecvData(hHandle, buffer, nLen, 10000);
		if( nlen <= 0 )
		{
			ConnectPool.Free(hHandle);
			WriteLog("执行功能号930037读入设备档案表时,运行RecvData失败\n");
			return RET_SYSERROR;
		}

		BOOL bRet=DecodeBufWithArray((unsigned char*)buffer,nlen,&apack,apackarray,&nRow,omsg);
		if( !bRet || apack.head.retCode )
		{
			ConnectPool.Free(hHandle);
			WriteLog("执行功能号930037读入设备档案表时,运行DecodeBufWithArray,返回无数据,失败!\n");
			return RET_SYSERROR;
		}

		WriteLog("执行功能号930037读入设备档案表时,得到设备数量为:%d,设备参数为:\n",nRow);

		for(int i=0; i< nRow; i++)
		{
			if( i == 0 ) pPacket = &apack.pack;
			else  pPacket = &apackarray[i-1];

			strcpy(pSmartDoc[k].m_szMacCode, pPacket->semp);		//终端机型号代码
			strcpy(pSmartDoc[k].m_szMacCard, pPacket->sholder_type);//可用IC卡卡型
			strcpy(pSmartDoc[k].m_szMacModle, pPacket->semp);		//终端机型号
			strcpy(pSmartDoc[k].m_szMacType, pPacket->semp);		//机型名称
			strcpy(pSmartDoc[k].m_szDeviceID, pPacket->sdate1);	//设备ID
			strcpy(pSmartDoc[k].m_szRegister, pPacket->sdate2);	//注册号
			pSmartDoc[k].m_nAuthID=ConvertID(pSmartDoc[k].m_szDeviceID);//授权号
			pSmartDoc[k].m_nMachineNo=pPacket->lvol4;			//机号	
			strcpy(pSmartDoc[k].m_szVersion, pPacket->sdate3);	//设备版本号
			strcpy(pSmartDoc[k].m_szPassword, "000000");			//系统员密码
			strcpy(pSmartDoc[k].m_szOprPasswd, "000000");			//管理员密码
			pSmartDoc[k].m_nPwdswitch=-1;							//密码开关
			strcpy(pSmartDoc[k].m_sClockVer, pPacket->stime0);	  //父设备
			strcpy(pSmartDoc[k].m_szOrgid, "001");				  //所属的组织代码
			pSmartDoc[k].m_nPortCount=pPacket->lvol5;			  //服务器端口总数
			pSmartDoc[k].m_nSMTPort=pPacket->lvol6;				  //服务器端口号
			strcpy(pSmartDoc[k].m_szPort, pPacket->sbank_code);	  //通讯端口
			pSmartDoc[k].m_nBaudRate=pPacket->lvol9;			  //波特率
			pSmartDoc[k].m_nCommMode=pPacket->lvol8;			  //链路模式
			strcpy(pSmartDoc[k].m_szAddr, pPacket->sstation0);    //通讯地址
			pSmartDoc[k].m_nStatus=pPacket->lvol7;                //设备状态, 下面定义为:

			pSmartDoc[k].m_nConnType = pPacket->lvol10;			  //通讯方式
			strcpy(pSmartDoc[k].m_szClass, pPacket->snote2);	  //卡类				  //

			pSmartDoc[k].m_wFlowNo=pPacket->lvol11+1;			  //期望流水号 modified
			pSmartDoc[k].m_wLastInvoiceNo=pPacket->lvol11;        //终端交易流水号期末值
			pSmartDoc[k].m_wStateNo=pPacket->lvol12;
			pSmartDoc[k].m_nFlow=1;									//序号
			pSmartDoc[k].m_nBeginInvoice=0;							//扎帐的开始流水
			pSmartDoc[k].m_wSettleinvoice=0;						//扎帐流水号期末值
			pSmartDoc[k].m_wEndInvoice=0;							//扎帐的结束流水号
			strcpy(pSmartDoc[k].m_sBlackExpire, pPacket->sserial0);   //黑名单的有效期
			strcpy(pSmartDoc[k].m_sDownBlackTime, pPacket->sserial1); //黑名单下传时间期末值
			pSmartDoc[k].m_nStartuse=0;								  //签到结果

			pSmartDoc[k].m_nCardID = 12;
			pSmartDoc[k].m_nDealCount = 10;
			pSmartDoc[k].m_nInMoney = 100000;
			pSmartDoc[k].m_nOutMoney = pSmartDoc[k].m_nInMoney; 
			pSmartDoc[k].m_nBeginInvoice = 0 ;
			pSmartDoc[k].m_wFlowNo = 0 ;
			pSmartDoc[k].m_wStateNo = 0 ;

			WriteLog("终端机型号代码=%s,可用IC卡卡型=%s, 终端机型号=%s, 机型名称=%s\n "
				"设备ID=%s, 注册号=%s, 机号=%d, 设备版本号=%s, 系统员密码=%s, 管理员密码=%s\n"
				"密码开关=%d, 服务器端口总数=%d, 服务器端口号=%d, 通讯端口=%s, 波特率=%d\n"
				"链路模式=%d,通讯地址=%s, 设备状态=%d, 交易流水号期末值=%d, 黑名单的有效期=%s, 黑名单版本=%s, 通讯方式=%d,卡类=%s, 父设备:%s\n",
				pPacket->semp, pPacket->sholder_type, pPacket->semp, pPacket->semp,
				pPacket->sdate1, pPacket->sdate2, pPacket->lvol4, pPacket->sdate3, "000000", "000000", 
				pSmartDoc[k].m_nPwdswitch, pPacket->lvol5, pPacket->lvol6, pPacket->sbank_code, pPacket->lvol9, 
				pPacket->lvol8, pPacket->sstation0, pPacket->lvol7, pPacket->lvol11, pPacket->sserial0, pPacket->sserial1, 
				pPacket->lvol10, pPacket->snote2, pPacket->stime0);

			if( !theApp.CheckSmartDocValid(&pSmartDoc[k]) )
			{
				WriteLog("无效设备!!!\n");
				ZeroMemory(&pSmartDoc[k], sizeof(TSSmartDoc));
			}
			else
			{
				WriteLog("有效设备!ID号=%s, 注册号=%s, 机号=%d, 网络类型:%d..父设备代码=%s\n", 
						  pSmartDoc[k].m_szDeviceID, pSmartDoc[k].m_szRegister, 
						  pSmartDoc[k].m_nMachineNo, pSmartDoc[k].m_nCommMode, pSmartDoc[k].m_sClockVer);
				k++;
			}
		}

		if( apack.head.nextflag == 0 )
			bEnd = true ;
	}

#else
	k = 0 ;
/***********************************************************************************************************************************************************/
// 以下为加入调试信息
/***********************************************************************************************************************************************************/
    int iTick = 0 ;
	char  sTempNo[32];
	char  sIP[32];
	char  szParent[32] = "" ;
	int iMacNo = 1;
	int nPort = 10001;

	strcpy(sIP, "10.83.28.40");

	for(int j=k; j<2; j++)
	{
		sprintf(sTempNo, "0000%04d", j+100);

		//模拟LPort
		if( iTick == 0 || iTick == 15 )
		{
			strcpy(pSmartDoc[k].m_szMacCode, "5301");		//终端机型号代码
			strcpy(pSmartDoc[k].m_szMacModle, "5301");		//终端机型号
			strcpy(pSmartDoc[k].m_szMacType, "5301");		//机型名称
			strcpy(pSmartDoc[k].m_szDeviceID, "0000918F");	//设备ID
			strcpy(pSmartDoc[k].m_szRegister, "0000918F");	//注册号
			pSmartDoc[k].m_nAuthID=ConvertID(pSmartDoc[k].m_szDeviceID);//授权号
			pSmartDoc[k].m_nMachineNo=1;			//机号	
			strcpy(pSmartDoc[k].m_szAddr, sIP);    //通讯地址
			pSmartDoc[k].m_nPortCount=16;			  //服务器端口总数
			sprintf(pSmartDoc[k].m_szPort, "%d", nPort); //nPort++);	  //通讯端口
			strcpy(pSmartDoc[k].m_sClockVer, "");	  //父设备

			iMacNo=1;
			strcpy(szParent, pSmartDoc[k].m_szDeviceID);
			pSmartDoc[k].m_nSMTPort=0;				  //服务器端口号
		}
		else
		{
			//if( iTick == 0 || iTick == 6 || iTick == 8 || iTick == 10 )
			//{
				strcpy(pSmartDoc[k].m_szMacCode, "0226");		//终端机型号代码
				strcpy(pSmartDoc[k].m_szMacCard, "64");//可用IC卡卡型
				strcpy(pSmartDoc[k].m_szMacModle, "0226");		//终端机型号
				strcpy(pSmartDoc[k].m_szMacType, "0226");		//机型名称
			//}
			/*else
			{
				strcpy(pSmartDoc[k].m_szMacCode, "0201");		//终端机型号代码
				strcpy(pSmartDoc[k].m_szMacCard, "64");//可用IC卡卡型
				strcpy(pSmartDoc[k].m_szMacModle, "0201");		//终端机型号
				strcpy(pSmartDoc[k].m_szMacType, "0201");		//机型名称
			}*/

			strcpy(pSmartDoc[k].m_szDeviceID, "00008B1a");	//设备ID
			strcpy(pSmartDoc[k].m_szRegister, "00008B1a");	//注册号
			pSmartDoc[k].m_nAuthID=0x00008B1a;//ConvertID(pSmartDoc[k].m_szDeviceID);//授权号
			pSmartDoc[k].m_nMachineNo=1;//++iMacNo;			//机号	
			pSmartDoc[k].m_nPortCount=16;			  //服务器端口总数
			strcpy(pSmartDoc[k].m_szAddr, sIP);    //通讯地址
			strcpy(pSmartDoc[k].m_sClockVer, szParent);	  //父设备
			pSmartDoc[k].m_nSMTPort=2; //iMacNo;				  //服务器端口号
		}

		if( iTick >= 15 )
			iTick = 0 ;
		else
			iTick++;

		strcpy(pSmartDoc[k].m_szMacCard, "64");//可用IC卡卡型
		strcpy(pSmartDoc[k].m_szVersion, "");	//设备版本号
		strcpy(pSmartDoc[k].m_szPassword, "000000");			//系统员密码
		strcpy(pSmartDoc[k].m_szOprPasswd, "000000");			//管理员密码
		pSmartDoc[k].m_nPwdswitch=-1;							//密码开关
		strcpy(pSmartDoc[k].m_szOrgid, "001");				  //所属的组织代码
		pSmartDoc[k].m_nBaudRate=19200;			  //波特率
		pSmartDoc[k].m_nCommMode=3;			  //链路模式
		pSmartDoc[k].m_nStatus=0;                //设备状态, 下面定义为:
		pSmartDoc[k].m_nConnType = 1;			  //通讯方式
		strcpy(pSmartDoc[k].m_szClass, "FFFFFFFFFF");	  //卡类				  //
		pSmartDoc[k].m_wFlowNo=0;			  //期望流水号 modified
		pSmartDoc[k].m_wLastInvoiceNo=0;        //终端交易流水号期末值
		pSmartDoc[k].m_wStateNo=0;
		pSmartDoc[k].m_nFlow=1;									//序号
		pSmartDoc[k].m_nBeginInvoice=0;							//扎帐的开始流水
		pSmartDoc[k].m_wSettleinvoice=0;						//扎帐流水号期末值
		pSmartDoc[k].m_wEndInvoice=0;							//扎帐的结束流水号
		strcpy(pSmartDoc[k].m_sBlackExpire, "991231010101");   //黑名单的有效期
		strcpy(pSmartDoc[k].m_sDownBlackTime, "991231010101"); //黑名单下传时间期末值
		pSmartDoc[k].m_nStartuse=0;								  //签到结果

		printf("有设备(ID=%s, 注册号:%s, 机号=%d, 网络类型:%d..父设备:%s...\n", 
			pSmartDoc[k].m_szDeviceID, pSmartDoc[k].m_szRegister, 
			pSmartDoc[k].m_nMachineNo, pSmartDoc[k].m_nCommMode, pSmartDoc[k].m_sClockVer);
		k++;
	}
#endif

	gnDocCount = k;
	gpSmartDoc = new TSSmartDoc[gnDocCount];
	if( gpSmartDoc == NULL )
	{
		printf("内存不足.....\n");
		gnDocCount = 0 ;
		ConnectPool.Free(hHandle);
		return RET_SYSERROR;
	}

	long iCount = 0 ;
	memcpy(gpSmartDoc,pSmartDoc,sizeof(TSSmartDoc)*k); 
	memset(pSmartDoc, 0, sizeof(TSSmartDoc)*k);

	for(int i=0; i< k; i++)
	{
		if( theApp.CheckSmartDocValid(gpSmartDoc, k, i) )
		{
			memcpy(&pSmartDoc[iCount++], &gpSmartDoc[i], sizeof(TSSmartDoc));
		}
	}

	memset(gpSmartDoc, 0, sizeof(TSSmartDoc)*k);
	gnDocCount = 0 ;
	k = iCount;

	ConnectPool.Free(hHandle);

	WriteLog("有效设备总数量:%d...........\n", k);

	*nRecCount = k;
	long nKCount = 0 ;
	for(i=0; i<k; i++)
	{
		if( strcmp(pSmartDoc[i].m_sClockVer, "") )
		{
			for(int j=0; j<k; j++)
			{
				if( !strcmp(pSmartDoc[j].m_szDeviceID, pSmartDoc[i].m_sClockVer) && i != j )
				{
					pSmartDoc[i].m_nParentID = pSmartDoc[j].m_nAuthID ;
					pSmartDoc[i].m_nLevel = 1;
					pSmartDoc[i].m_szLevelArray[0] = (char)pSmartDoc[j].m_nMachineNo;
					pSmartDoc[i].m_szLevelArray[1] = (char)pSmartDoc[i].m_nSMTPort;
					printf("父设备%s\n",pSmartDoc[j].m_szDeviceID);
					printf("------pSmartDoc[i].m_szDeviceID = %s \n",pSmartDoc[i].m_szDeviceID);
					printf("------pSmartDoc[i].m_szLevelArray=%d\n",pSmartDoc[j].m_nMachineNo);
					printf("------pSmartDoc[i].m_szLevelArray=%d\n",pSmartDoc[i].m_nSMTPort);					
					break;
				}
			}
		}
		else
		{
			pSmartDoc[i].m_nLevel=0;
		}
	}

	gnDocCount = k;
	memcpy(gpSmartDoc,pSmartDoc,sizeof(TSSmartDoc)*k); 

	return RET_OK;
}