📄 gwconsole.cpp
字号:
CDnNode *DnNode; DnNode = (CDnNode *) Gateway->Code_CP_Map.Find(atoi(Gateway->CP_Array[Num].ServiceCode)); if(DnNode!=NULL) { DnNode->Num = Num; //在下节点信息结构体数组(常驻内存)中的下标 strcpy(DnNode->ServiceCode , Gateway->CP_Array[Num].ServiceCode); DnNode->NodeID = atoi(DnNode->ServiceCode); //下节点的节点编号 strcpy(DnNode->ServiceID , Gateway->CP_Array[Num].ServiceID); strcpy(DnNode->ServiceName , Gateway->CP_Array[Num].ServiceName); DnNode->CPID = Gateway->CP_Array[Num].CPID; strcpy(DnNode->NodeIp , Gateway->CP_Array[Num].NodeIp); strcpy(DnNode->Username , Gateway->CP_Array[Num].Username); strcpy(DnNode->Secret , Gateway->CP_Array[Num].Secret); DnNode->WantReport = Gateway->CP_Array[Num].WantReport; DnNode->TestTime = Gateway->CP_Array[Num].TestTime; DnNode->RecvQ_Size = Gateway->CP_Array[Num].RecvQ_Size; DnNode->SendQ_Size = Gateway->CP_Array[Num].SendQ_Size; DnNode->SentW_Size = Gateway->CP_Array[Num].SentW_Size; strcpy(DnNode->FeeType , Gateway->CP_Array[Num].FeeType); strcpy(DnNode->FeeCode , Gateway->CP_Array[Num].FeeCode); DnNode->Encoding = Gateway->CP_Array[Num].Encoding; DnNode->ShowLog = Gateway->CP_Array[Num].ShowLog; strcpy(DnNode->Seperator , Gateway->CP_Array[Num].Seperator); strcpy(DnNode->URL , Gateway->CP_Array[Num].URL); } } strcpy(Message,"DnNodes' information is reloaded from database!"); if(write(mysock,Message,strlen(Message))!=(int)strlen(Message)) { printf("SysAdmin: Connection Lost when Writing to Sock!\n"); close(mysock); break; } } //=====================列出在线上节点===================== else if(strcmp(Command,"upalive")==0) { //memset(Message,0,sizeof(Message)); strcpy(Message,"Alive UpNodes : "); for(int i=0; i<UPNODE_NUM; i++) { if(!Gateway->UpNode[i].State) sprintf(Message,"%s%s[%d]; ",Message,Gateway->UpNode[i].NodeCode,Gateway->UpNode[i].NodeID); } if(write(mysock,Message,strlen(Message))!=(int)strlen(Message)) { printf("SysAdmin: Connection Lost when Writing to Sock!\n"); close(mysock); break; } } //=====================列出在线下节点===================== else if(strcmp(Command,"dnalive")==0) { int AliveNum; AliveNum = Gateway->Sock_CP_Map.GetSize(); //memset(Message,0,sizeof(Message)); sprintf(Message,"Alive DnNodes[%d] : ", AliveNum); if(AliveNum) { Map_Pos Pos; CDnNode *theDnNode; Gateway->Sock_CP_Map.PosInit(&Pos); while(1) { theDnNode=NULL; RetCode = Gateway->Sock_CP_Map.GetNext((char **)&theDnNode, &Pos); if(theDnNode==NULL) break; else { strcat(Message,theDnNode->ServiceCode); strcat(Message,"; "); } } } if(write(mysock,Message,strlen(Message))!=(int)strlen(Message)) { printf("SysAdmin: Connection Lost when Writing to Sock!\n"); close(mysock); break; } } //=================检查某个节点的队列状况=================== else if(strncmp(Command,"checkQ",strlen("checkQ"))==0) { char NodeID[20]; int iNodeID; strncpy(NodeID, Command+strlen("checkQ")+1, sizeof(NodeID)-1); iNodeID = atoi(NodeID); printf("\n Console: NodeID=%s, iNodeID=%d.\n",NodeID,iNodeID); if(iNodeID<1000) //假定节点编号小于1000的为上节点编号 { int i; for(i=0; i<UPNODE_NUM; i++) { if(Gateway->UpNode[i].NodeID == iNodeID) { sprintf(Message,"UpNode[%d]: RecvQ=[%d/%d], SendQ=[%d/%d], SentQ=[%d/%d].",\ iNodeID,Gateway->UpNode[i].RecvQ->GetLen(), Gateway->UpNode[i].RecvQ->GetMaxSize(),\ Gateway->UpNode[i].SendQ->GetLen(), Gateway->UpNode[i].SendQ->GetMaxSize(),\ Gateway->UpNode[i].SentQ.GetSize(),Gateway->UpNode[i].SentQ.GetMaxSize()); break; } } if(i==UPNODE_NUM) sprintf(Message,"The UpNode[%d] doesn't exist!",iNodeID); } else //假定节点编号大于1000的为下节点编号 { CDnNode * TheDnNode; TheDnNode = (CDnNode *) Gateway->Code_CP_Map.Find(iNodeID); if(TheDnNode==NULL) { sprintf(Message,"The DnNode[%d] doesn't exist or not online!",iNodeID); } else { sprintf(Message,"DnNode[%d]: RecvQ=[%d/%d], SendQ=[%d/%d], SentQ=[%d/%d].",\ iNodeID,TheDnNode->RecvQ->GetLen(), TheDnNode->RecvQ->GetMaxSize(),\ TheDnNode->SendQ->GetLen(), TheDnNode->SendQ->GetMaxSize(),\ TheDnNode->SentQ.GetSize(), TheDnNode->SentQ.GetMaxSize()); } } if(write(mysock,Message,strlen(Message))!=(int)strlen(Message)) { printf("SysAdmin: Connection Lost when Writing to Sock!\n"); close(mysock); break; } } //=================检查所有节点的队列状况=================== else if(strncmp(Command,"checkallQ",strlen("checkallQ"))==0) { memset(Message,0,sizeof(Message)); for(int i=0; i<UPNODE_NUM; i++) { sprintf(Message,"%sUpNode[%d]: RecvQ=[%d/%d], SendQ=[%d/%d], SentQ=[%d/%d].\n",\ Message, Gateway->UpNode[i].NodeID,\ Gateway->UpNode[i].RecvQ->GetLen(), Gateway->UpNode[i].RecvQ->GetMaxSize(),\ Gateway->UpNode[i].SendQ->GetLen(), Gateway->UpNode[i].SendQ->GetMaxSize(),\ Gateway->UpNode[i].SentQ.GetSize(), Gateway->UpNode[i].SentQ.GetMaxSize()); break; } Map_Pos Pos; CDnNode *theDnNode; Gateway->Code_CP_Map.PosInit(&Pos); while(1) { theDnNode=NULL; RetCode = Gateway->Code_CP_Map.GetNext((char **)&theDnNode, &Pos); if(theDnNode==NULL) break; else { sprintf(Message,"%sDnNode[%d]: RecvQ=[%d/%d], SendQ=[%d/%d], SentQ=[%d/%d].\n",\ Message, theDnNode->NodeID,\ theDnNode->RecvQ->GetLen(),theDnNode->RecvQ->GetMaxSize(),\ theDnNode->SendQ->GetLen(),theDnNode->SendQ->GetMaxSize(),\ theDnNode->SentQ.GetSize(),theDnNode->SentQ.GetMaxSize()); } } if(write(mysock,Message,strlen(Message))!=(int)strlen(Message)) { printf("SysAdmin: Connection Lost when Writing to Sock!\n"); close(mysock); break; } } //======================其他监控命令====================== //查询线程池大小、查询连接池大小 //重新装载下行路由信息 //禁止某下节点连接、允许某下节点连接 //断开某上节点连接,建立某上节点的连接 else if(0) { } //======================无效命令========================== else { //memset(Message,0,sizeof(Message)); BadCommand++; if(BadCommand<6) { strcpy(Message,"Unknown Command!"); if(write(mysock,Message,strlen(Message))!=(int)strlen(Message)) { printf("SysAdmin: Connection Lost when Writing to Sock!\n"); close(mysock); break; } } else { strcpy(Message,"Unknown Command beyond limit! Connection is to be closed!"); if(write(mysock,Message,strlen(Message))!=(int)strlen(Message)) { printf("SysAdmin: Connection Lost when Writing to Sock!\n"); } close(mysock); break; } }//else,错误命令 }//while(1),不断接收命令 }//for(;;),接收下一次管理连接 }//while(1),重新建立监听管理连接的socketConsoleEnd: AdminSock.Close_sock(); Gateway->ConsoleThr=0; if(Gateway->ToExit) strcpy(sSysEvent,"LOG: Console for Gateway is ended! "); else strcpy(sSysEvent,"Error: Console for Gateway QUIT! "); Gateway->WrSystemLog->WriteLog(sSysEvent,SYSTEMLOG); return (void *)NULL; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -