五,路由过程
本实现部分为整个系统执行时序的表现,如果与通信模拟系统整合,本部分是不需要的。所以这部分是为单独调试而写的。为了检验路由模拟系统,写了一个单数据包路由的过程。但语义基本上是完整的。如果在通信模拟系统里实现这一部分,可以同步详尽的扩充设计。
1,单数据包路由
方法名称: Communication::SingleDataRout
方法参数: 无
返回值: 无
方法的目的: 实现单个数据包由创建到路由成功的全过程,期间可能会有若干次的网络重建。
可能的出错: 无
// 单数据包路由
void Communication::SingleDataRout(void)
{
//局部变量
int index=0,number=0;
char ch;
bool bWriteSucc=true;
NetData *pNetData=NULL;
Loop:
//发送若干数据包后,自动检测网络是否已经发生改变;如果已经改变,
//则重新获得网络信息并创建之。
if(number==0)
net.ReCreate();
net.RoutComputeBuilder();
//index记录数据包的源路由器标号
index=net.MakeData();
pNetData=(pNodeArray+index)->pRout->NetReadData();
while(pNetData!=NULL)
{//该数据包进行路由过程
if(pNetData->IsMessage())
{//应答消息
index = net.GetRoutID(pNetData->GetNextHop());
bWriteSucc=(pNodeArray+index)->pRout->NetWriteData(*pNetData);
//涌塞则等待;完善的涌塞处理方案另外实现。
if(!bWriteSucc)
continue;
index = net.GetRoutID(pNetData->GetPreHop());
}else if(!pNetData->IsMessage())
{//网络数据包
index = net.GetRoutID(pNetData->GetNextHop());
bWriteSucc=(pNodeArray+index)->pRout->NetWriteData(*pNetData);
//涌塞则等待;完善的涌塞处理方案另外实现。
if(!bWriteSucc)
continue;
}//end of else if
pNetData=(pNodeArray+index)->pRout->NetReadData();
}//end of while
number = (number+1)%6;
std::cout<<"\n\nInput 'e' to exit,or press any char key to continue:";
std::cin>>ch;
std::cout<<std::endl;
if(ch!='e')
goto Loop;
}
<2004-4-11 完成>