@ -3,6 +3,7 @@ package org.qortal.controller.arbitrary;
import org.apache.logging.log4j.LogManager ;
import org.apache.logging.log4j.Logger ;
import org.qortal.controller.Controller ;
import org.qortal.data.arbitrary.ArbitraryFileListResponseInfo ;
import org.qortal.data.transaction.ArbitraryTransactionData ;
import org.qortal.network.Peer ;
import org.qortal.repository.DataException ;
@ -11,11 +12,9 @@ import org.qortal.repository.RepositoryManager;
import org.qortal.utils.ArbitraryTransactionUtils ;
import org.qortal.utils.Base58 ;
import org.qortal.utils.NTP ;
import org.qortal.utils.Triple ;
import java.util.Arrays ;
import java.util.Iterator ;
import java.util.Map ;
import java.util.* ;
import java.util.stream.Collectors ;
public class ArbitraryDataFileRequestThread implements Runnable {
@ -51,28 +50,31 @@ public class ArbitraryDataFileRequestThread implements Runnable {
boolean shouldProcess = false ;
synchronized ( arbitraryDataFileManager . arbitraryDataFileHashResponses ) {
Iterator iterator = arbitraryDataFileManager . arbitraryDataFileHashResponses . entrySet ( ) . iterator ( ) ;
if ( ! arbitraryDataFileManager . arbitraryDataFileHashResponses . isEmpty ( ) ) {
// Sort by lowest number of node hops first
Comparator < ArbitraryFileListResponseInfo > lowestHopsFirstComparator =
Comparator . comparingInt ( ArbitraryFileListResponseInfo : : getRequestHops ) ;
arbitraryDataFileManager . arbitraryDataFileHashResponses = arbitraryDataFileManager . arbitraryDataFileHashResponses
. stream ( ) . sorted ( lowestHopsFirstComparator )
. collect ( Collectors . toCollection ( ( ) - > Collections . synchronizedList ( new ArrayList < > ( ) ) ) ) ;
Iterator iterator = arbitraryDataFileManager . arbitraryDataFileHashResponses . iterator ( ) ;
while ( iterator . hasNext ( ) ) {
if ( Controller . isStopping ( ) ) {
return ;
}
Map . Entry entry = ( Map . Entry ) iterator . next ( ) ;
if ( entry = = null | | entry . getKey ( ) = = null | | entry . getValue ( ) = = null ) {
ArbitraryFileListResponseInfo responseInfo = ( ArbitraryFileListResponseInfo ) iterator . next ( ) ;
if ( responseInfo = = null ) {
iterator . remove ( ) ;
continue ;
}
hash58 = ( String ) entry . getKey ( ) ;
Triple < Peer , String , Long > value = ( Triple < Peer , String , Long > ) entry . getValue ( ) ;
if ( value = = null ) {
iterator . remove ( ) ;
continue ;
}
peer = value . getA ( ) ;
signature58 = value . getB ( ) ;
Long timestamp = value . getC ( ) ;
hash58 = responseInfo . getHash58 ( ) ;
peer = responseInfo . getPeer ( ) ;
signature58 = responseInfo . getSignature58 ( ) ;
Long timestamp = responseInfo . getTimestamp ( ) ;
if ( now - timestamp > = ArbitraryDataManager . ARBITRARY_RELAY_TIMEOUT | | signature58 = = null | | peer = = null ) {
// Ignore - to be deleted
@ -92,6 +94,7 @@ public class ArbitraryDataFileRequestThread implements Runnable {
break ;
}
}
}
if ( ! shouldProcess ) {
// Nothing to do