/// <summary> /// Avvia una nuova ricerca in base ai dati di ricerca specificati, creando un nuovo messaggio di richiesta /// con un valore di TimeToLive impostato secondo la configurazione e inviandolo a tutti gli attuali vicini /// di questo nodo della rete. Nell'eventualità remota che l'identificativo generato per il nuovo messaggio /// corrisponda ad uno degli identificativi attualmente presenti nella tabella di inoltro, il messaggio non /// viene inviato e questo metodo restituisce false; in caso contrario, restituisce true. /// </summary> /// <param name="data">I dati che rappresentano la ricerca da effettuare.</param> /// <returns>true se richiesta relativa alla ricerca viene inviata ai vicini; in caso contrario, false.</returns> public bool CreateNewSearch(SearchData data) { Guid msgId = Guid.NewGuid(); lock (m_ForwardingTableLocker) { if (!m_ForwardingTable.Add(msgId, null, data)) { return false; // GUID duplicato } } WriteToLog("Sending query {0}: search data = {1}...", msgId, data); QueryData query = new QueryData(msgId, m_MessageInitialTtl, 0) { Options = data.GetSearchOptions() }; SendQuery(query, null); return true; }