Talk:RoboRumble/Development

From Robowiki
Jump to navigation Jump to search

Background Uploader

Test N°1:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;

public class UploaderMain {

	String clientVersion = "1";
	
	long maxTry = 10;
	
	public static void main(String args[]){
		
		String infoFilePath = "./roborumble/roborumble.txt";
		
		if (args.length != 0)
			if (args.length == 1)
				infoFilePath = args[0];
			else{
				System.out.println("Usage: java UploaderMain [option]\nOption: Path to roborumble settings file");
				return;
			}
		
		File test = new File(infoFilePath);
		if ( !test.exists() ){
			
		}
		
		new UploaderMain(infoFilePath);
	}
	
	public UploaderMain(String infoFilePath){
		
//		read info from file
		ArrayList<String> allInfo = read( infoFilePath );
//		extact info
		String[] info = findInfo(allInfo);
		
		if ((info == null) || (info.length != 2)){
			logErr("Roborumble settings file invalid");
			return;
		}
		
//		set info
		String uploadServerUrl = info[0];
		String battleFilePath = info[1];
		
//		read battle from file
		ArrayList<String> battles = read( battleFilePath );
		
		if (battles == null){
			logErr("Battle files format invalid");
			return;
		}
		
//		now delete the battles
		File battleFileOld = new File(battleFilePath);
		if (!battleFileOld.delete())
			throw new IllegalArgumentException("Delete: deletion failed");
		
//		prepare data to be uploaded (only 1vs1 supported)
		battles = prepareToUpload1VS1(battles);
		
		ArrayList<String> battlesNotSend;
		long countTry = 10;
		while ((battles.size() > 0) || (countTry > maxTry)){
			battlesNotSend = new ArrayList<String>();
			for (String battle : battles){
				if ( !sendBattle(battle, uploadServerUrl) )
					battlesNotSend.add(battle);
			}
			battles = battlesNotSend; 
		}
	}

	private String[] findInfo(ArrayList<String> allInfo) {
		/*
		 * FIND INFO:
		 * at [0]: uploadServerUrl - RESULTSURL=
		 * at [1]: battleFilePath - OUTPUT=
		 */
		String[] info = new String[2];
		info[0] = null;
		info[1] = null;
		
		for (String ris : allInfo){
			if (ris.indexOf("RESULTSURL=") >= 0){
				logOut(ris.substring(ris.indexOf("=")+1));
				info[0] = ris.substring(ris.indexOf("=")+1);
			}
			if (ris.indexOf("OUTPUT=") >= 0){
				logOut(ris.substring(ris.indexOf("=")+1));
				info[1] = ris.substring(ris.indexOf("=")+1);
			}	
		}
		
		if ((info[0] != null)&&(info[1] != null))
			return info;
		
		return null;
	}

	private ArrayList<String> prepareToUpload1VS1(ArrayList<String> battles) {
		
		ArrayList<String> preparedBattles = new ArrayList<String>();
		
		String[] parametres = new String[6];
		String preparingBattle;
		
		for(int i = 0; i < battles.size(); i++){
			
			//extrapolate battlefield information
			parametres = battles.get(i).split(",");
			
			if ( parametres.length != 6 ){
				logErr( "invalid battlefield: "+battles.get(i) );
				continue;
			}
				
			
//			preparing string to upload
			preparingBattle = new String();
			preparingBattle += "version="+clientVersion;
			preparingBattle += "&game="+parametres[0];
			preparingBattle += "&rounds="+parametres[1];
			preparingBattle += "&field="+parametres[2];
			preparingBattle += "&user="+parametres[3];
			preparingBattle += "&time="+parametres[4];


				
//			extrapolate robot 1
			i++;
			parametres = battles.get(i).split(",");
				
//			if invalid information
			if ( parametres.length != 4 ){
				logErr( "invalid robot: "+battles.get(i) );
				continue;
			}
				
//			preparing string to upload
			preparingBattle += "&fname="+parametres[0];
			preparingBattle += "&fscore="+parametres[1];
			preparingBattle += "&fbulletd="+parametres[2];
			preparingBattle += "&fsurvival="+parametres[3];

//			extrapolate robot 2
			i++;
			parametres = battles.get(i).split(",");
				
//			if invalid information
			if ( parametres.length != 4 ){
				logErr( "invalid robot: "+battles.get(i) );
				continue;
			}
				
//			preparing string to upload
			preparingBattle += "&sname="+parametres[0];
			preparingBattle += "&sscore="+parametres[1];
			preparingBattle += "&sbulletd="+parametres[2];
			preparingBattle += "&ssurvival="+parametres[3];
			preparedBattles.add(preparingBattle);
		}
		
		return preparedBattles;
	}
	
	private boolean sendBattle(String battle, String uploadServerURL){
//		crea l'URL e la connessione HTTP con la servlet
		try{
			
			URL url = new URL(uploadServerURL);
			HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
			httpURLConnection.setRequestMethod( "POST" ) ;
			httpURLConnection.connect() ;
			

			OutputStreamWriter dataOutputStream = new OutputStreamWriter(httpURLConnection.getOutputStream());
			dataOutputStream.write( battle );
			dataOutputStream.flush();
			dataOutputStream.close();
			
			BufferedReader dataInputStream = new BufferedReader( new InputStreamReader( httpURLConnection.getInputStream() ) );
			String response = new String();
			while(true){
				response = dataInputStream.readLine();
				if ( response == null )
					break;
				logOut("risposta: "+response);
			}
			dataInputStream.close();
			
		}catch(Exception e){
			logErr("error: "+e);
		}
		return false;
	}

	private void logOut(String string) {
		log(string, "./log/outUploader");
	}
	
	private void logErr(String string) {
		log(string, "./log/errUploader");
	}

	private void log(String string, String fileName) {
		FileOutputStream file;
		try {
			file = new FileOutputStream(fileName);
			PrintStream output = new PrintStream(file);
			output.println(string);
			output.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	private ArrayList<String> read( String filePath ) {
		
		try{
			
			ArrayList<String> battles = new ArrayList<String>();
			FileReader battleFile = new FileReader( filePath );
			BufferedReader battleReader = new BufferedReader(battleFile);
			String battle = null;
			while(true){
				battle = battleReader.readLine();
				if (battle==null)
					break;
				battles.add(battle);
			}
			battleReader.close();
			
			return battles;
			
		}catch(Exception e){
			System.out.println("Error: "+e);
			return null;
		}
	}
}

thank to Rednaxela for code formatting --lestofante 21:16, 4 December 2008 (UTC)

You cannot post new threads to this discussion page because it has been protected from new threads, or you do not currently have permission to edit.

There are no threads on this page yet.