?? tcp_sub.cpp
字號:
}
//----------------------------------------------------------------------------------------
void UpdateTransTable(){
BOOL TempTable[NODEMAXNUM][NODEMAXNUM];
int i,j;
for(i=0;i<NODEMAXNUM;i++)
for(j=0;j<NODEMAXNUM;j++)
TempTable[i][j]=FALSE;
CanBeRouter=FALSE;
//-----------------------------------
//NodeNo NET1 NET2
// . .
// . .
// i OK! X
// . .
// . .
// j X OK!
// . .
// . .
//-----------------------------------
//即:本機能通過Net1收到i的報文卻不能通過Net2收到,對于j剛好相反.
//則說明:1.本機的兩個網絡都通訊正常.
// 2.i機的Net2有問題,j機的Net1有問題.
// 3.i,j兩機彼此收不到對方的報文,本機卻可以收到i,j兩機的報文.
// 4.本機可以作為轉發器將從Net1(Net2)收到的i(j)機的報文通過Net2(Net1)發送給j(i)機.
//所以:
// TransTable[i][j]=TransTable[j][i]=TRUE;
// CanBeRouter=TRUE;
for(i=0;i<NODEMAXNUM;i++)
if(NodeStatus[i].Net1.IsConnect!=NodeStatus[i].Net2.IsConnect)
for(j=i+1;j<NODEMAXNUM;j++)
if(NodeStatus[j].Net1.IsConnect!=NodeStatus[j].Net2.IsConnect)
if(NodeStatus[i].Net1.IsConnect!=NodeStatus[j].Net1.IsConnect)
{
TempTable[i][j]=TempTable[j][i]=TRUE;
CanBeRouter=TRUE;
}
for(i=0;i<NODEMAXNUM;i++)
for(j=0;j<NODEMAXNUM;j++)
TransTable[i][j]=TempTable[i][j];
#ifndef _TCZ_
if(CanBeRouter==TRUE)
{
if(Router.InUse==FALSE)
//本機可以作為轉發器并且當前網上無其他轉發器在工作
{
Router.InUse=TRUE;
Router.NodeNo=ATBRouterNo=Addr->scadainf.NodeId-'A';
Router.DelayCount=0;
FrameFlag[ ATB ] = 1;
SendMessage (pStaticThis->HWindow, WM_SENDDATA, 0, 0L);
}
if( Router.NodeNo==Addr->scadainf.NodeId-'A' )//本機正作為當前轉發器工作
ATBRouterNo=Addr->scadainf.NodeId-'A'; //不斷廣播自己的NodeNo以使其它主機確認當前的轉發器是誰
else ATBRouterNo=-1;//本機可以作為轉發器但當前網上已有其它轉發器在工作
}
else //CanBeRouter==FALSE
{
if( Router.InUse==TRUE)
{
if(Router.NodeNo==Addr->scadainf.NodeId-'A')
//本機是當前轉發器卻不能再作為轉發器工作
{
Router.InUse=FALSE;
Router.NodeNo=-1;
Router.DelayCount=0;
ATBRouterNo=-2;
FrameFlag[ ATB ] = 1;
SendMessage (pStaticThis->HWindow, WM_SENDDATA, 0, 0L);
}
else ATBRouterNo=-1;//本機不是當前轉發器,也不能作為轉發器工作,但卻有其他轉發器在工作
}
else ATBRouterNo=-1;//本機不是當前轉發器,也不能作為轉發器工作,也沒有有其他轉發器在工作
}
#endif
}
//-------------------------------------------------------------------------------------------------
void DispNodeStatus(){
if (!IsIconic (pTcpWin->HWindow))
{
HDC hdc = GetDC (pTcpWin->HWindow);
DWORD dwExt = GetTextExtent (hdc, "S", 1);
WORD nHeight = HIWORD (dwExt);
char str[150]="";
char s1[80]="";
char s2[80]="";
char s3[80]="";
char s4[80]="";
char s5[80]="";
BOOL First=TRUE;
int x = 10;
int y = 10;
int i,j;
y += nHeight +2;
#ifdef _TCZ_
wsprintf(str," 本機 (Fert %c) 統計的當前網上各節點狀態:",syscfg->GetNode()+'A');
#else
wsprintf(str," 本機 ( Host %c ) 統計的當前網上各節點狀態:",Addr->scadainf.NodeId);
#endif
TextOut (hdc, x, y, str, lstrlen (str));
y += nHeight +2;
y += nHeight +2;
PutAStr(hdc,y," 主機","子網1報文IP","超時計數","子網2報文IP","超時計數");
y += nHeight +2;
y += nHeight +2;
for(i=0;i<NODEMAXNUM;i++)
{
if(i<HOSTNODEMAXNUM) wsprintf(s1,"Host %c ",i+'A');
else{
if(First) { y += 8; First=FALSE; }
wsprintf(s1,"Fert %c ",i-HOSTNODEMAXNUM+'A');
}
if(NodeStatus[i].Net1.IsConnect==TRUE)
wsprintf(s2,"%s ",inet_ntoa(*(LPIN_ADDR)(&NodeStatus[i].Net1.IPAddr)));
else wsprintf(s2,"___.___.___.___");
wsprintf(s3," %u ",NodeStatus[i].Net1.DelayCount);
if(NodeStatus[i].Net2.IsConnect==TRUE)
wsprintf(s4,"%s ",inet_ntoa(*(LPIN_ADDR)(&NodeStatus[i].Net2.IPAddr)));
else wsprintf(s4,"___.___.___.___");
wsprintf(s5," %u ",NodeStatus[i].Net2.DelayCount);
PutAStr(hdc,y,s1,s2,s3,s4,s5);
y += nHeight +2;
}
y += nHeight +2;
y += nHeight +2;
if(Router.InUse==TRUE)
{
if(Router.NodeNo < HOSTNODEMAXNUM)
wsprintf(str,"HOST %c",Router.NodeNo+'A');
else wsprintf(str,"FERT %c",Router.NodeNo-HOSTNODEMAXNUM+'A');
}
else wsprintf(str,"無");
wsprintf(s1,"當前轉發節點 : %s ",str);
wsprintf(s3," %d ",Router.DelayCount);
PutAStr(hdc,y,s1,"",s3,"","");
y += nHeight +2;
y += nHeight +2;
if (Router.InUse==TRUE)
{
if(CanBeRouter==TRUE)
{
for(i=0;i<NODEMAXNUM;i++)
for(j=i+1;j< NODEMAXNUM;j++)
if(TransTable[i][j]==TRUE)
{
if(i<HOSTNODEMAXNUM)
wsprintf(s1," Host %c ",i+'A');
else wsprintf(s1," Fert %c ",i-HOSTNODEMAXNUM+'A');
if(j<HOSTNODEMAXNUM)
wsprintf(s3," Host %c ",j+'A');
else wsprintf(s3," Fert %c ",j-HOSTNODEMAXNUM+'A');
PutAStr(hdc,y,s1," <--------------------> ",s3,"","");
y += nHeight +1;
}
}
else
{
BOOL Sign=FALSE;
for(i=0;i<NODEMAXNUM;i++)
if( i!=Router.NodeNo )
{
if( (NodeStatus[i].Net1.IsConnect==TRUE) &&
(NodeStatus[i].Net1.IPAddr==NodeStatus[Router.NodeNo].Net1.IPAddr )
)
{
if(i<HOSTNODEMAXNUM)
wsprintf(s1," Host %c ",i+'A');
else wsprintf(s1," Fert %c ",i-HOSTNODEMAXNUM+'A');
Sign=TRUE;
PutAStr(hdc,y,s1,"","","","");
y += nHeight +1;
}
else if( (NodeStatus[i].Net2.IsConnect==TRUE) &&
(NodeStatus[i].Net2.IPAddr==NodeStatus[Router.NodeNo].Net2.IPAddr)
)
{
if(i<HOSTNODEMAXNUM)
wsprintf(s1," Host %c ",i+'A');
else wsprintf(s1," Fert %c ",i-HOSTNODEMAXNUM+'A');
Sign=TRUE;
PutAStr(hdc,y,s1,"","","","");
y += nHeight +1;
}
}
if(Sign==TRUE)
{
if(Router.NodeNo<HOSTNODEMAXNUM)
wsprintf(str,"Host %c ",Router.NodeNo+'A');
else wsprintf(str,"Fert %c ",Router.NodeNo-HOSTNODEMAXNUM+'A');
wsprintf(s1,"的報文是經 %s 轉發而來",str);
PutAStr(hdc,y,s1,"","","","");
y += nHeight+1;
}
}
}
for(i=0;i<10;i++) { PutAStr(hdc,y,"","","","",""); y += nHeight+1; }
ReleaseDC (pTcpWin->HWindow, hdc);
InvalidateRect (pTcpWin->HWindow, NULL, FALSE);
}
}
//--------------------------------------------------------------------------------------------
void PutAStr(HDC hdc,int y,LPSTR s1,LPSTR s2,LPSTR s3,LPSTR s4,LPSTR s5){
int pos[5]={50,120,250,350,480};
char WhiteStr[50]=" ";
if(s1==NULL) TextOut (hdc, pos[0], y, WhiteStr, lstrlen (WhiteStr));
else TextOut (hdc, pos[0], y, s1, lstrlen (s1));
if(s2==NULL) TextOut (hdc, pos[1], y, WhiteStr, lstrlen (WhiteStr));
else TextOut (hdc, pos[1], y, s2, lstrlen (s2));
if(s3==NULL) TextOut (hdc, pos[2], y, WhiteStr, lstrlen (WhiteStr));
else TextOut (hdc, pos[2], y, s3, lstrlen (s3));
if(s4==NULL) TextOut (hdc, pos[3], y, WhiteStr, lstrlen (WhiteStr));
else TextOut (hdc, pos[3], y, s4, lstrlen (s4));
if(s5==NULL) TextOut (hdc, pos[4], y, WhiteStr, lstrlen (WhiteStr));
else TextOut (hdc, pos[4], y, s5, lstrlen (s5));
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -