- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!Qualnetアドオン ノード系
ノードポインタからインデックスを取得
int GetIndexFromNode(Node* node)
{
int id = node->nodeId;
int index = id+1;
return index;
}
アドレスをノードが持っているかを判定
bool ContainAddressInInterface(Node* node, NodeAddress searchAddress)
{
printf("contain address node[%d]\n",node->nodeId);
bool returnFlag = false;
for(int interfaceIndex = 0 ; interfaceIndex < node->numberInterfaces ;interfaceIndex++)
{
Address address;
NetworkGetInterfaceInfo(node,interfaceIndex,&address,NETWORK_IPV4);
if(address.interfaceAddr.ipv4 == searchAddress)
{
returnFlag =true;
}
else{}
}
return returnFlag;
}
idからノードポインタを取得
void GetNodeFromId(Node* baseNode,Node* returnNode,int nodeId)
{
bool containAddress = false;
Node* tempNode = baseNode;
//search this node
//__________________________________
if(tempNode->nodeId == nodeId)
{
returnNode = tempNode;
}
else
{
//search prev node
//__________________________________
for(tempNode = tempNode->prevNodeData; tempNode!=NULL ;tempNode = tempNode->prevNodeData)
{
if(tempNode->nodeId == nodeId){
returnNode = tempNode;
break;
}
}
if(containAddress == true)
{
//search next node
//__________________________________
for(tempNode = tempNode->nextNodeData; tempNode!=NULL ;tempNode = tempNode->nextNodeData)
{
if(tempNode->nodeId == nodeId){
returnNode = tempNode;
break;
}
}
}
}
}
アドレスからノードポインタを取得
void GetNodeFromAddress(Node* targetNode,Node** returnNode,NodeAddress address)
{
bool containAddress = false;
Node* tempNode = targetNode;
containAddress = ContainAddressInInterface(tempNode,address);
//search this node
//__________________________________
if(containAddress == true)
{
*returnNode = tempNode;
printf("returnNode = %d\n",*returnNode);
return;
}
//search prev node
//__________________________________
for(tempNode = targetNode->prevNodeData; tempNode!=NULL ;tempNode = tempNode->prevNodeData)
{
containAddress = ContainAddressInInterface(tempNode,address);
if(containAddress == true)
{
*returnNode = tempNode;
printf("returnNode = %d\n",*returnNode);
return ;
}
}
//search next node
//__________________________________
for(tempNode = targetNode->nextNodeData; tempNode!=NULL ;tempNode = tempNode->nextNodeData)
{
containAddress = ContainAddressInInterface(tempNode,address);
if(containAddress == true)
{
*returnNode = tempNode;
printf("returnNode = %d\n",*returnNode);
return ;
}
}
}
サーバ側ノードが通信しているクライアントノードを取得
node,msgはサーバ側
AppTimer *timer;
int client_NodeAddress;
Node *client_node;
timer = (AppTimer *) MESSAGE_ReturnInfo(msg);
client_NodeAddress = timer->connectionId;
GetNodeFromAddress(node, &client_node,client_NodeAddress);