📄 opepool.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 + -