亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? c-sparsifier.cc

?? clustering for ns-2 simulation
?? CC
?? 第 1 頁 / 共 2 頁
字號:
					
				case CSPARISFIER_STATUS_CONNECT : 

					if (_DEBUG_)
						printf("[CONNECT]\n");

					if ((status == CSPARISFIER_STATUS_CONNECT) || (status == CSPARISFIER_STATUS_END)) {
						if (find(sparseNeighbors.begin(), sparseNeighbors.end(), sender_address) != sparseNeighbors.end())
							send_CONNECT(sender_address);
					}
					
					break;
					
			}
			
			break;
            
        default:
            break;
    }
	
}

//
// Invia un messaggio di "Candidatura" ovvero la lista di vicini che
// il nodo propone.
//
void
CSPARSIFIER_Agent::send_CANDIDATE(NodeAddress to) 
{		
    Packet* p = allocpkt();
    
    struct hdr_c_sparsifier * csparsifierh = HDR_CSPARSIFIER(p);
    
    csparsifierh->msg_type = CSPARSIFIER_CANDIDATE;
    csparsifierh->sender_address = myAddress;
    csparsifierh->destination_address = to;

	csparsifierh->selectedNodes = &candidateNeighbors;

	if (_DEBUG_) {
		printf("%d send CANDIDATE: (", myAddress);
		for (NodeList::iterator node = candidateNeighbors.begin(); node != candidateNeighbors.end(); node++)
			printf("%d  ", *node);
		printf("\n");
	}

	sendDown(p, sizeof(CSparsifierMessageType) + sizeof(nsaddr_t) * (2 + CSPARSIFIER_Agent::virtual_neighbors), to, CSPARSIFIER_Agent::max_delay);
}

//
// Invia un messaggio di "Candidatura" ovvero la lista di vicini che
// il nodo propone.
//
void
CSPARSIFIER_Agent::send_CONNECT(NodeAddress to) 
{		
    Packet* p = allocpkt();
    
    struct hdr_c_sparsifier * csparsifierh = HDR_CSPARSIFIER(p);
    
    csparsifierh->msg_type = CSPARSIFIER_CONNECT;
    csparsifierh->sender_address = myAddress;
    csparsifierh->destination_address = to;

	if (_DEBUG_)
		printf("%d send CONNECT to %d\n", myAddress, to);

	sendDown(p, sizeof(CSparsifierMessageType) + sizeof(nsaddr_t) * (2), to, CSPARSIFIER_Agent::max_delay);
}

//
// Funzione richiamata allo scadere di un timeout per un certo tipo di messaggio:
// Il nodomanda la richiesta del dato al vicino interessato.
//
void
CSPARSIFIER_Agent::timeout(NodeAddress from, CSparsifierTimeoutType timeout)
{
	switch (timeout) {
	
		case TIMEOUT_CONNECT :
			if (_DEBUG_)
				printf("%d timeout connect\n", myAddress);
			send_REQUEST(from, CSPARSIFIER_CONNECT);
			break;
				
		case TIMEOUT_CANDIDATE :
			if (_DEBUG_)
				printf("%d timeout candidate\n", myAddress);
			send_REQUEST(from, CSPARSIFIER_CANDIDATE);
			break;
	}
}

//
// Funzione richiamata allo scadere dell'ultimo timeout.
//
void
CSPARSIFIER_Agent::lastTimeout(NodeAddress from, CSparsifierTimeoutType timeout)
{
	// TODO
	/*
    switch(type) {
        case CSPARISFIER_STATUS_HELLO : 
            if (_DEBUG_)
                printf("%d LAST TIMEOUT (HELLO) from %d (%f)\n", myAddress, from, Scheduler::instance().clock());
            break;

        case CSPARISFIER_STATUS_FIRST_DECISION : 
            if (_DEBUG_)
                printf("%d LAST TIMEOUT (FIRST_DECISION) from %d (%f)\n", myAddress, from, Scheduler::instance().clock());
            break;

        case CSPARISFIER_STATUS_LAST_DECISION : 
            if (_DEBUG_)
                printf("%d LAST TIMEOUT (LAST DECISION) from %d (%f)\n", myAddress, from, Scheduler::instance().clock());
            break;
    }
	*/
}

//
// Procedura di partenza per l'algoritmo di clustering.
// 
void
CSPARSIFIER_Agent::startModule() 
{
    // Inizializza le informazioni comuni.
    ClusteringModule::startModule();
	    
    // Stato dell'agente
    status = CSPARISFIER_STATUS_CANDIDATE;

	// Svuota la lista dei vicini.
	neighbors.clear();

	// Svuota il buffer dei nodi che sono connessi.
	connect_nodes.clear();

	//
	// Carica la lista dei vicini
	//
	GridKeeper * gk = GridKeeper::instance();
	MobileNode **output = new MobileNode *[gk->size_];
	
	if (gk != NULL) {
		
		int num_neighbors = gk->get_neighbors(myMobileNode, output);
		for (int i = 0; i < num_neighbors; i++) {
			MobileNode * current = output[i];
			
			// Initialize neighbor's info
			NodeAddress neighborAddress = current->address();
			neighbors.insert(neighborAddress);
		}

	}
	
	delete[] output;
	
	if (neighbors.size() == 0)
		printf("CIAO");
	
	// Svuota la lista dei candidati.
	candidateNeighbors.clear();
	
	// Sceglie in maniera random: "NUM_VICINI" vicini oppure tutti (se sono di meno).
	NodeList::iterator node = neighbors.begin();
	for (int i = 0; i < (neighbors.size() < CSPARSIFIER_Agent::virtual_neighbors ? neighbors.size() : CSPARSIFIER_Agent::virtual_neighbors); i++) {
		candidateNeighbors.insert(*node);
		node++;
	}
	
	// Svuota la mappa delle preferenze dei vicini.
	selectedNodes.clear();
	
    // Invia un messaggio di CONNESSIONE ai vicini.
	send_CANDIDATE(-1);
	
    // Inizializza i timeout per i messaggi CANDIDATE.
    timer->launchCandidateTimeouts(neighbors);
}

//
// Procedura richiamata alla fine dell'algoritmo di clustering.
//
void
CSPARSIFIER_Agent::endModule()
{
	// L'algoritmo termina: il nodo puo'memorizzare il proprio clusterHead.
	status = CSPARISFIER_STATUS_END;

	if (utility)
		((CSparsifierUtility*)utility)->setNeighbors(myAddress, sparseNeighbors);

	if (_DEBUG_) {
		printf("END SPARSIFIER: %d ha vicini: ", myAddress);
		for (NodeList::iterator i = sparseNeighbors.begin(); i != sparseNeighbors.end(); i++)
			printf("%d  ", *i);
		printf("\n");
	}

    // Segnala la conclusione del processo di clustering.
    ClusteringModule::endModule();

	// Start upper module
	if (upTarget)
		Separator::instance().endCurrentModule(myAddress);
}

//
// Procedura di ricezione dei messaggi HELLO.
//
void
CSPARSIFIER_Agent::receive_CANDIDATE(NodeAddress from, NodeList & selected)
{

	// Memorizza la lista dei vicini scelta dal vicino.
	selectedNodes[from] = selected;
}

NodeList &
CSPARSIFIER_Agent::getNeighbors()
{
	return sparseNeighbors;
}

void 
CSPARSIFIER_Agent::send_REQUEST(NodeAddress to, CSparsifierMessageType type)
{
    Packet* p = allocpkt();
    
    struct hdr_c_sparsifier * csparsifierh = HDR_CSPARSIFIER(p);
    
    csparsifierh->msg_type = CSPARSIFIER_REQUEST;
    csparsifierh->sender_address = myAddress;
    csparsifierh->destination_address = to;
	
	csparsifierh->request = type;

	if (_DEBUG_)
		printf("%d send REQUEST %s to %d\n", myAddress, (type == CSPARSIFIER_CANDIDATE ? "CANDIDATE" : "CONNECT"), to);

	sendDown(p, sizeof(CSparsifierMessageType) * 2 + sizeof(nsaddr_t) * (2), to, CSPARSIFIER_Agent::max_delay);
}

// Verifica che un pacchetto sia di tipo DATA.
bool 
CSPARSIFIER_Agent::isDataPacket(Packet * p)
{
    struct hdr_c_sparsifier *csparsifierh = HDR_CSPARSIFIER(p);    
	return (csparsifierh->msg_type == CSPARSIFIER_DATA);
}
		
// 
// Preparazione all'invio di un messaggio al layer inferiore
//
void 
CSPARSIFIER_Agent::prepareSendDataDown(Packet * p)
{
    struct hdr_c_sparsifier *csparsifierh = HDR_CSPARSIFIER(p);
    hdr_ip* iph = hdr_ip::access(p);

	// Marca il nodo come dato.
	csparsifierh->msg_type = CSPARSIFIER_DATA;
}

/**
 * Query if algorithm support a particular protocol:
 * that method is probably called before a getData
 * method.
 */
bool 
CSPARSIFIER_Agent::supportProtocol(string protocol)
{
	if (protocol == "sparsification")
		return true;
	return false;
}

/**
 * That method is used to get data from an algorithm
 * that was check to implements a particular protocol
 */
void * 
CSPARSIFIER_Agent::getData(string data)
{
	if (data == "neighbors") {
		return &sparseNeighbors;
	}
	return ClusteringModule::getData(data);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99视频有精品| 欧美三级视频在线播放| 亚洲主播在线播放| 精品粉嫩aⅴ一区二区三区四区| 暴力调教一区二区三区| 日韩精品视频网| 成人免费在线播放视频| 精品国产乱码久久| 欧美无乱码久久久免费午夜一区| 国产成人精品亚洲午夜麻豆| 青青草一区二区三区| 一区二区三区在线观看动漫| 久久久久久电影| 91精品国产入口| 欧美亚洲尤物久久| 91麻豆视频网站| 国产精品一二三四| 美脚の诱脚舐め脚责91 | 欧美精品一区二区蜜臀亚洲| 在线视频一区二区免费| 成人av影院在线| 国产精品亚洲成人| 久久精品国产网站| 性做久久久久久久免费看| 成人免费一区二区三区视频| 欧美高清一级片在线观看| 精品久久久久久久一区二区蜜臀| 欧美三级视频在线播放| 在线观看免费成人| 色综合咪咪久久| 99久久精品免费看国产免费软件| 国产成人精品免费视频网站| 国产尤物一区二区| 国产一区二区毛片| 国产综合色在线| 国模一区二区三区白浆| 精品无人区卡一卡二卡三乱码免费卡| 日韩av中文字幕一区二区三区| 亚洲国产精品久久人人爱蜜臀 | 欧美tickling挠脚心丨vk| 91精品国产色综合久久久蜜香臀| 欧美色视频在线观看| 欧美日韩一区二区电影| 欧美日韩一区二区在线视频| 欧美剧情片在线观看| 欧美欧美欧美欧美| 91精品国产综合久久小美女| 91精品中文字幕一区二区三区| 欧美日本高清视频在线观看| 欧美福利视频一区| 日韩视频123| 久久精品一区四区| 自拍偷拍亚洲欧美日韩| 亚洲欧美日本韩国| 亚洲专区一二三| 日本视频中文字幕一区二区三区| 青娱乐精品视频在线| 激情综合网av| 成人高清视频免费观看| 色婷婷亚洲综合| 在线成人午夜影院| 精品福利一区二区三区免费视频| 欧美激情在线一区二区| 亚洲另类色综合网站| 午夜电影一区二区| 久久精品国产精品青草| 高清国产午夜精品久久久久久| 91网站黄www| 欧美一区二区私人影院日本| 精品国产成人系列| 国产精品久久久久久久浪潮网站| 一区二区日韩av| 久久99精品久久久久婷婷| 成人小视频免费观看| 在线观看一区二区精品视频| 日韩一区二区三区电影在线观看| 国产拍揄自揄精品视频麻豆| 亚洲精品国产成人久久av盗摄| 三级不卡在线观看| 粉嫩高潮美女一区二区三区 | 国产成人免费视频| 在线视频观看一区| 久久亚洲捆绑美女| 一区二区在线免费| 久久成人免费电影| 91亚洲大成网污www| 91精品国产综合久久香蕉的特点 | 亚洲国产aⅴ天堂久久| 美女视频一区二区| 99久久精品情趣| 日韩精品专区在线| 亚洲精品成a人| 韩日精品视频一区| 欧美日本视频在线| 中文字幕一区二区三区四区不卡| 蜜桃视频免费观看一区| 日本高清不卡视频| 久久精品人人做人人综合| 亚洲电影第三页| 成人av在线网| 欧美电影免费观看高清完整版在线观看| 国产精品电影院| 韩国午夜理伦三级不卡影院| 欧美日韩亚洲综合在线| 亚洲欧洲精品一区二区三区不卡 | 国产成人一区二区精品非洲| 欧美人牲a欧美精品| 国产精品久久久久久久裸模 | 欧美午夜不卡视频| ...xxx性欧美| 国产69精品久久久久777| 日韩精品影音先锋| 三级精品在线观看| 欧美三级乱人伦电影| 中文字幕在线一区免费| 国产一区999| 欧美变态口味重另类| 日韩国产欧美在线播放| 色狠狠色噜噜噜综合网| 中文字幕中文字幕在线一区| 国产精品一区在线| 亚洲精品在线网站| 麻豆国产精品一区二区三区| 欧美日韩电影在线| 香蕉成人啪国产精品视频综合网| 色av一区二区| 亚洲三级电影网站| 99精品视频在线观看免费| 国产亚洲短视频| 国产成人免费xxxxxxxx| 欧美国产日产图区| 国产一区亚洲一区| 久久综合九色综合欧美就去吻| 中文字幕亚洲欧美在线不卡| 欧美亚洲图片小说| 国产精品国产精品国产专区不片| 国产高清一区日本| 国产午夜一区二区三区| 国产一区在线观看视频| 久久一日本道色综合| 国产一区二区三区四| 欧美国产一区在线| 99精品视频一区二区| 亚洲日穴在线视频| 欧美日韩中文字幕精品| 亚洲成人av福利| 欧美精品久久久久久久多人混战 | 天天综合色天天综合| 欧美精品一卡两卡| 久久99国产乱子伦精品免费| 久久综合久久综合亚洲| 成人免费高清在线观看| 亚洲三级理论片| 欧美人伦禁忌dvd放荡欲情| 日本欧美韩国一区三区| 亚洲精品在线一区二区| av中文一区二区三区| 亚洲天堂中文字幕| 欧美另类高清zo欧美| 狠狠色狠狠色综合| 18成人在线观看| 欧美日韩精品欧美日韩精品一综合| 婷婷中文字幕综合| 国产亚洲欧美日韩日本| 波多野结衣中文字幕一区二区三区| 国产精品美女久久福利网站| voyeur盗摄精品| 亚洲在线观看免费视频| 国产成人自拍网| 亚洲色图欧美偷拍| 717成人午夜免费福利电影| 一区视频在线播放| 欧美日本在线播放| 福利一区二区在线| 亚洲欧美另类小说| 日韩精品一区二区三区四区| 亚洲少妇最新在线视频| 制服丝袜亚洲播放| 大胆亚洲人体视频| 亚洲欧美日韩小说| 日韩精品一区二区三区视频播放| 日韩影院精彩在线| 久久久久久久久久电影| 欧美性色黄大片| 久久99久久久欧美国产| 亚洲日本一区二区| 欧美在线观看视频一区二区三区| 久久99精品国产麻豆不卡| 亚洲欧洲av在线| 日韩亚洲欧美高清| 日本高清视频一区二区| 亚洲一区成人在线| 精品久久久久久亚洲综合网| 日本道精品一区二区三区| 美国三级日本三级久久99| 夜夜嗨av一区二区三区中文字幕| 精品国产一区二区三区久久久蜜月| 成人av午夜电影| 韩国av一区二区三区在线观看| 国产精品久久国产精麻豆99网站|