トップ 一覧 検索 ヘルプ RSS ログイン

Programming_qualnet_addon_nodeの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!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);