FileDocCategorySizeDatePackage
Main.javaAPI DocAzureus 3.0.3.45888Thu May 17 12:45:30 BST 2007org.gudy.azureus2.ui.swt

Main

public class Main extends Object
author
Olivier

Fields Summary
private static final LogIDs
LOGID
public static final String
PR_MULTI_INSTANCE
StartServer
startServer
Constructors Summary
public Main(String[] args)

  
   
  
  	  
  
  	try{
  			// This *has* to be done first as it sets system properties that are read and cached by Java
  		
  		COConfigurationManager.preInitialise();
  		
	  	String	mi_str = System.getProperty( PR_MULTI_INSTANCE );
	  	
	  	boolean mi = mi_str != null && mi_str.equalsIgnoreCase("true");
	  	
	    startServer = new StartServer();

		    
	
	    boolean debugGUI = Boolean.getBoolean("debug");
	    
	    if( mi || debugGUI){
	    	
	    	// create a MainWindow regardless to the server state
	    	
		  AzureusCore		core = AzureusCoreFactory.create();

	      new Initializer(core,startServer,args);
	      
	      return;
	    }
	    
	    
	    if ( processParams(args, startServer) ){
	
	    	AzureusCore		core = AzureusCoreFactory.create();
	    	
	    	startServer.pollForConnections(core);
	
	    	new Initializer(core,startServer,args);
	      
	    }
	    
  	}catch( AzureusCoreException e ){
  		
  		Logger.log(new LogEvent(LOGID, "Start failed", e));
  	}
  
Methods Summary
public static voidmain(java.lang.String[] args)

 	
  	//Debug.dumpThreads("Entry threads");
 
  	//Debug.dumpSystemProperties();
  	
		if (System.getProperty("ui.temp") == null) {
			System.setProperty("ui.temp", "az2");
		}

		new Main(args);
  
public static booleanprocessParams(java.lang.String[] args, StartServer startServer)

param
args
return
whether to init the core

    boolean	closedown	= false;
    
    boolean another_instance = startServer.getState() != StartServer.STATE_LISTENING;
    
    	// WATCH OUT FOR LOGGING HERE - we don't want to use Logger if this is a secondary instance as
    	// it initialised TOO MUCH of AZ core
    
    for (int i=0;i<args.length;i++){

    	String	arg = args[i];
    	
    	if ( arg.equalsIgnoreCase( "--closedown" )){
    		
    		closedown	= true;
    		
    		break;
    	}
	        // Sometimes Windows use filename in 8.3 form and cannot
	        // match .torrent extension. To solve this, canonical path
	        // is used to get back the long form
	    	
        String filename = arg;
          
          if( 	filename.toUpperCase().startsWith( "HTTP:" ) || 
          		filename.toUpperCase().startsWith( "HTTPS:" ) || 
          		filename.toUpperCase().startsWith( "MAGNET:" ) ) {
        	  
        	  if ( !another_instance ){
        		  
        		Logger.log(new LogEvent(LOGID, "Main::main: args[" + i
        				+ "] handling as a URI: " + filename));
        	  }
        	  
            continue;  //URIs cannot be checked as a .torrent file
          }            
        
        try{
        	File	file = new File(filename);
        	
        	if ( !file.exists()){
        		
        		throw( new Exception("File '" + file + "' not found" ));
        	}
        	
        	args[i] = file.getCanonicalPath();
          	
        		// don't use logger if we're not the main instance as we don't want all
        		// the associated core initialisation + debug file moving...
        	
        	if ( (!another_instance) && Logger.isEnabled()){
        		
        		Logger.log(new LogEvent(LOGID, "Main::main: args[" + i
        				+ "] exists = " + new File(filename).exists()));
        	}
        }catch( Throwable e ){
        	
        	if ( another_instance ){
        		
        		e.printStackTrace();
        		
        	}else{
        		
	        	Logger.log(new LogAlert(LogAlert.REPEATABLE, LogAlert.AT_ERROR,
							"Failed to access torrent file '" + filename
									+ "'. Ensure sufficient temporary "
									+ "file space available (check browser cache usage)."));
        	}
        }
    }
    
    
     if( another_instance ) {  //looks like there's already a process listening on 127.0.0.1:6880
    	//attempt to pass args to existing instance
    	StartSocket ss = new StartSocket(args);
    	
    	if( !ss.sendArgs() ) {  //arg passing attempt failed, so start core anyway
    		another_instance = false;
    		String msg = "There appears to be another program process already listening on socket [127.0.0.1: 6880].\nLoading of torrents via command line parameter will fail until this is fixed.";
    		System.out.println( msg );
    		Logger.log(new LogAlert(LogAlert.REPEATABLE, LogAlert.AT_WARNING, msg));
    	}
    }
    
    if ( !another_instance ){
    	
    	if ( closedown ){
    			// closedown request and no instance running
    		return false;
    	}
    	
    	return true;
    }
    return false;