本文整理汇总了C++中NodeData::make_reTransMsg方法的典型用法代码示例。如果您正苦于以下问题:C++ NodeData::make_reTransMsg方法的具体用法?C++ NodeData::make_reTransMsg怎么用?C++ NodeData::make_reTransMsg使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类NodeData
的用法示例。
在下文中一共展示了NodeData::make_reTransMsg方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: AppLayerCCNHost
void AppLayerCCNHost(Node* node, Message* msg) {
NodeData* nodeData;
nodeData = (NodeData*)node->appData.nodeData;
switch(msg->eventType)
{
/*//fujiwara//
* 1. 移動を検知したらMR(interest)を作成してPoAとHOMEにおくる
* 2. MR(data)を受け取ったら
* さらに分岐
case hand_over_kenchi //やることを書く
{
clocktype send_delayTime;
uint32_t chunk_num;
map<uint32_t, clocktype>::iterator it;
uint32_t next_msgName = global_node_data->return_MsgName();
uint32_t end_chunk_num = next_msgName % 40 + 10;
CcnMsg* ccnMsg;
ccnMsg = new CcnMsg();
ccnMsg->resent_times = 0;
ccnMsg->ccn_method = DEFAULT;
ccnMsg->msg_type = Interest;
ccnMsg->msg_name = next_msgName; //msg_nameはよくわからない 多分解析のときにわかりやすくする狙いか?
ccnMsg->msg_chunk_num = nodeData->return_lastChunkNum(ccnMsg) + 1;
ccnMsg->EncodeFullNameMsg();
ccnMsg->sender_node_id = node->nodeId; // node->nodeid = このメッセージを送るノードのID
ccnMsg->source_node_id = source_node_id; //ここを変更 source_node_id = 送信先ノード(現状サーバが一個しかとれない仕様……)
ccnMsg->payload_length = 30; //ペイロードはヘッダを除いたデータ部分の大きさ
ccnMsg->hops_limit = 20;
ccnMsg->content_type = CommonData;
ccnMsg->end_chunk_num = end_chunk_num;
ccnMsg->interest_genTime = node->getNodeTime();
ccnMsg->data_genTime = node->getNodeTime();
nodeData->set_lastChunkNum(ccnMsg); //chunkの最後の値を記録 よくわからない 必要?
nodeData->reqMapInput(node, ccnMsg); //msg_full_nameとノードのシミュレーション時間のペアを記録する
nodeData->fibSend_DEFAULT(node, ccnMsg);//送信
nodeData->make_reTransMsg(node, ccnMsg);//再送の話 よくわからない 必要か?
}*/
case MSG_APP_FromTransDataReceived: // データ受け取り時
{
TransportToAppDataReceived *openResult;
openResult = (TransportToAppDataReceived*) MESSAGE_ReturnInfo(msg);
APP_TcpCloseConnection(node, openResult->connectionId);
// msgからccnメッセージを取得
// ccnメッセージを処理
// データ送信の場合、TCP接続要求を送る
// msgのキーからccnメッセージを取り出す
CcnMsg* ccnMsg;
ccnMsg = nodeData->BufferRetrieve_Host(node, msg);
Node* remote_node;
NodeData* remote_nodeData;
remote_node = MAPPING_GetNodePtrFromHash(GlobalNodeData::nodeHash, ccnMsg->previous_node_id);
remote_nodeData = (NodeData*)remote_node->appData.nodeData;
// パケットロストによる取得エラー
if(nodeData->node_role + remote_nodeData->node_role == CLIENT + RELAY_NODE) {
if((rand() * 100.0) < (nodeData->error_rate * RAND_MAX)) {
//printf("packet lost occured at %d->%d\n", remote_node->nodeId, node->nodeId);
//nodeData->statData->packet_lostTimes++;
if(ccnMsg->ccn_method == PROPOSAL &&
(ccnMsg->msg_type == Interest || ccnMsg->msg_type == Data)){
} else if(ccnMsg->ccn_method == PRIOR) {
nodeData->statData->packet_lostTimes++; // this is not lost but unacquired
break;
} else {
break;
}
}
}
nodeData->StatisticalInfo_recvCcnMsg(node, ccnMsg);
// ホップカウント(loop検出用)
if(!ccnMsg->checkHopCount()) {
printf("hop count is over\n");
break;
}
switch(ccnMsg->ccn_method)
{
case DEFAULT:
case DEFAULT_FAST:
{
switch(ccnMsg->msg_type) {
case Interest:
{
// ソースノードまで転送
// PITに名前を記録(msg_full_name)
// ソースノードならDataパケットを返送
// 返送する際はPITを参照
if(nodeData->pitInsert_DEFAULT(node, ccnMsg)) {
// PITで登録済み
//.........这里部分代码省略.........
示例2: AppLayerCCNClient
void AppLayerCCNClient(Node* node, Message* msg) {
NodeData* nodeData;
nodeData = (NodeData*)node->appData.nodeData;
Node* source_node;
source_node = MAPPING_GetNodePtrFromHash(GlobalNodeData::nodeHash, source_node_id);
nodeData->source_nodeData = (NodeData*)source_node->appData.nodeData;
NodeData* source_nodeData;
source_nodeData = nodeData->source_nodeData;
switch(msg->eventType)
{
// タイマーメッセージ
case MSG_APP_TimerExpired: // タイマーメッセージ
{
AppTimer* timer;
timer = (AppTimer *)MESSAGE_ReturnInfo(msg);
// timer messageの種類によって処理を分ける
switch(timer->type)
{
case APP_TIMER_SEND_PKT:
{
printf("この表示がなければ、APP_TIMER_SEND_PKTはビデオストリーミング確定 ");
clocktype send_delayTime;
uint32_t chunk_num;
map<uint32_t, clocktype>::iterator it;
chunk_num = 0;
do {
chunk_num++;
it = source_nodeData->dataGenerateTime_map.find(chunk_num);
if(it == source_nodeData->dataGenerateTime_map.end()) {
ERROR_ReportError("dataGenerateTime_map error\n");
}
send_delayTime = it->second - node->getNodeTime();
} while(send_delayTime < 0);
nodeData->set_lastChunkNum(msg_videoData_name + node->nodeId % 3, chunk_num - 1);
nodeData->set_lastRecvMsg(msg_videoData_name + node->nodeId % 3, chunk_num - 1);
CcnMsg* ccnMsg;
do {
ccnMsg = new CcnMsg();
ccnMsg->ccn_method = nodeData->ccn_method;
ccnMsg->resent_times = 0;
ccnMsg->msg_type = Interest;
ccnMsg->msg_name = msg_videoData_name + node->nodeId % 3;
ccnMsg->msg_chunk_num = nodeData->return_lastChunkNum(ccnMsg) + 1;
ccnMsg->EncodeFullNameMsg();
ccnMsg->sender_node_id = node->nodeId;
ccnMsg->source_node_id = source_node_id;
ccnMsg->payload_length = 30;
ccnMsg->hops_limit = 20;
ccnMsg->interest_genTime = node->getNodeTime();
ccnMsg->content_type = VideoData;
ccnMsg->end_chunk_num = UINT32_MAX;
it = source_nodeData->dataGenerateTime_map.find(ccnMsg->msg_chunk_num);
ccnMsg->data_genTime = it->second;
nodeData->set_lastChunkNum(ccnMsg);
nodeData->fibSend(node, ccnMsg);
if(ccnMsg->ccn_method == DEFAULT) {
nodeData->make_reTransMsg(node, ccnMsg);
nodeData->set_lastRecvMsg(msg_videoData_name + node->nodeId % 3, UINT32_MAX - 3);
nodeData->reqMapInput(node, ccnMsg);
}
else if(ccnMsg->ccn_method == DEFAULT_FAST) {
nodeData->make_reTransMsg(node, ccnMsg);
nodeData->set_lastRecvMsg(msg_videoData_name + node->nodeId % 3, UINT32_MAX - 3);
nodeData->reqMapInput(node, ccnMsg);
}
else if(ccnMsg->ccn_method == PRIOR) {
nodeData->reqMapInput_PRIOR(node, ccnMsg);
break;
}
else if(ccnMsg->ccn_method == PROPOSAL) {
nodeData->set_lastRecvMsg(msg_videoData_name + node->nodeId % 3, UINT32_MAX - 1);
nodeData->reqMapInput(node, ccnMsg);
//printf("[node%d][msg%d] sendInterest\n", node->nodeId, ccnMsg->msg_name);
break;
}
} while(nodeData->set_windowSize(node, ccnMsg));
break;
} // APP_TIMER_SEND_PKT
case APP_TIMER_DATA_SEND_PKT:
{
printf("この表示がなければ、APP_TIMER_DATA_SEND_PKTはいらない子。てかどうやってここはいるんだ… ");
CcnMsg* ccnMsg;
for(int i = 0; i < 3; i++) {
ccnMsg = new CcnMsg();
ccnMsg->resent_times = 0;
ccnMsg->ccn_method = PRIOR;
ccnMsg->msg_type = Data;
ccnMsg->msg_name = msg_videoData_name + i;
ccnMsg->msg_chunk_num = nodeData->return_lastChunkNum(ccnMsg) + 1;
ccnMsg->EncodeFullNameMsg();
//.........这里部分代码省略.........