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

📄 opepool.c

📁 公关系统服务器后台程序
💻 C
字号:
#include <stdio.h>#include <string.h>#include "macpool.h"#include "shmpool.h"#include "dbfun.h"#include "cmddef.h"#include "opepipe.h"#include "opepool.h"#define QRYMAC	"select terminal_id,macaddr,ipaddr from terminal "#define INSMAC  "insert into terminal (name,macaddr,ipaddr) "#define UPDMAC	"update terminal set "#define DELMAC	"delete from terminal "#define ADDLOG	"insert log (action,operator,attime,state) "extern int getNumFromCard(char*);static void addLog(int cmdType){	/*	char qryStr[128];	char actbuf[32];	switch(cmdType)	{	case cmdTERMCONNECT:		strcpy(actbuf,"终端联机\0");		break;	case cmdTERMNEW:		strcpy(actbuf,"新终端联机\0");		break;	case cmdTERMUPDATE:		strcpy(actbuf,"终端维护成功\0");		break;	case cmdTERMDELETE:		strcpy(actbuf,"终端删除\0");		break;	}	sprintf(qryStr,"%s values('%s','服务器',now(),0)",ADDLOG,actbuf);#if DEBUG	printf("qryStr:%s\n",qryStr);#endif	if(dbExecute(qryStr)!=dbSuccess)		printf("addLog failed because db failed!\n");	*/}int macPoolInit(){	int i;	char qryStr[128];	short totalNum;	macPoolDef macPool;		totalNum=getNumFromCard("/dev/systemcard");//	printf("totalNum==========%d\n",totalNum);	if(totalNum<1)	{		shmPoolInit(0,sizeof(macPoolDef));		printf("can not get pool volume\n");		return 0;	}		if(shmPoolInit(totalNum,sizeof(macPoolDef))==poolConnected)	{		printf("pool have inited.\n");		return 100;	}	#if DEBUG	if(dbBegin("192.168.0.254","jetvod","jetsic","jetsic")!=dbSuccess)#else	if(dbBegin("192.168.0.254","jetvod","jetsic","jetsic")!=dbSuccess)	#endif	{		printf("connect db failed!\n");		return -1;	}		sprintf(qryStr,"%s where type=1 order by ipaddr limit %d",QRYMAC,totalNum);#if DEBUG	printf("qryStr=%s\n",qryStr);#endif	if(dbQuery(qryStr)!=dbSuccess)	{		printf("query terminal error!\n");		return 1;	}	totalNum=dbCount();#if DEBUG	printf("qryStr=%s\n",qryStr);#endif	for(i=0;i<totalNum;i++)	{		dbMove(i);		dbGetMacFromDB(&macPool);		macPool.connect=0;		macPool.pingc=0;		poolWriteNode(&macPool,i);	}#if DEBUG	printf("totalNum===%d\n",totalNum);#endif	poolSetUsed(totalNum);#if DEBUG	printf("totalNum=======%d\n",poolGetUsed());#endif		sprintf(qryStr,"%s where type=2 limit 10",QRYMAC);#if DEBUG	printf("qryStr=%s\n",qryStr);#endif	if(dbQuery(qryStr)!=dbSuccess)	{		printf("query manage error!\n");		return 1;	}		totalNum=dbCount();	for(i=0;i<totalNum;i++)	{		dbMove(i);		dbGetMacFromDB(&macPool);		addMIpToPool(macPool.ipaddr);		}	return 100;}int addToPool(char *macSn,char *ipaddr){	int i,count,macid;	macPoolDef macPool;	char qryStr[128];		macid=poolGetMaintainMark();#if DEBUG	printf("proc:addToPool macid======%d\n",macid);#endif	if(macid==-1)	{		count=poolGetCount();		poolMove(0);		for(i=0;i<count;i++)		{			poolGetNext(&macPool);			if(macPool.macid==0)			{				//new terminal connect..				macPool.connect=1;				macPool.pingc=3;				strcpy(macPool.mac,macSn);				strcpy(macPool.ipaddr,ipaddr);				sprintf(qryStr,"%s values('点歌终端','%s','%s')",INSMAC,macSn,ipaddr);				dbExecute(qryStr);				memset(qryStr,0,128);				sprintf(qryStr,"%s where macaddr='%s'",QRYMAC,macSn);				if(dbQuery(qryStr)==dbSuccess)				{					dbMove(0);					dbGetMacFromDB(&macPool);				}				else					printf("dbQuery error!\n");				poolWriteNode(&macPool,i);				poolSetUsed(poolGetUsed()+1);								//writelog				addLog(cmdTERMNEW);				return macPool.macid;							}			else if(strcmp(macPool.mac,macSn)==0)			{				//old terminal connect				char upMark=0;				macPool.connect=1;				macPool.pingc=3;				if(strcmp(macPool.ipaddr,ipaddr)!=0)				{					memcpy(macPool.ipaddr,ipaddr,16);					upMark=1;				}				poolWriteNode(&macPool,i);				if(upMark)				{					sprintf(qryStr,"%sipaddr='%s' where terminal_id=%d",UPDMAC,ipaddr,macPool.macid);					dbExecute(qryStr);				}				addLog(cmdTERMCONNECT);				return macPool.macid;			}			else				continue;		}		if(i==count)		{			//no position.			return 0;		}	}	else	{		int nodeID;		nodeID=poolQueryNodeByMacID(macid);		if(nodeID<0)			return 0;		if(poolQueryNode(&macPool,nodeID)==poolSuccess)		{			sprintf(qryStr,"%s mac='%s',ipaddr='%s' where terminal_id=%d",UPDMAC,macSn,ipaddr,macPool.macid);			dbExecute(qryStr);			macPool.connect=1;			macPool.pingc=3;			macPool.macid=macid;			sprintf(macPool.mac,macSn);			sprintf(macPool.ipaddr,ipaddr);			poolWriteNode(&macPool,nodeID);			poolSetMaintainMark(-1);					//writelog			addLog(cmdTERMUPDATE);			return macid;		}	}	return 0;}int poolMaintain(int macid){	short nodep;	nodep=poolSetMaintainMark(macid);	if(nodep>=0)	{		macPoolDef mp;		poolQueryNode(&mp,nodep);		mp.connect=2;		poolWriteNode(&mp,nodep);		return 1;	}	else		return 0;}int delFromPool(int macid){	char qryStr[128];	char cmdBuf;#if DEBUG	printf("poolUsed=========%d\n",poolGetUsed());#endif	if(poolDeleteNode(macid)==poolSuccess)	{		sprintf(qryStr,"%s where terminal_id=%d",DELMAC,macid);#if DEBUG		printf("qryStr:=%s\n",qryStr);#endif			dbExecute(qryStr);		cmdBuf=(char)cmdTERMDELETE;		writePipe(&cmdBuf,1);		addLog(cmdTERMDELETE);		return 1;	}	return 0;	}void viewPool(macPoolDef *pool,short nodeID){	poolQueryNode(pool,nodeID);}int addMIpToPool(char *ipaddr){	int i,count;	char poolip[16];	count=shmQueryMc();	for(i=0;i<count;i++)	{		shmQueryMIp(poolip,i);		if(strcmp(ipaddr,poolip)==0)			return i;	}	if(i==count && i<10)		return shmWriteMIp(ipaddr);	else		return 0;}int poolGetMIp(char *ipaddr,int id){	if(id>10)	{		memset(ipaddr,0,16);		return 0;	}	return shmQueryMIp(ipaddr,id);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -