Talk:RoboRumble/Development

From Robowiki
< Talk:RoboRumble
Revision as of 22:16, 4 December 2008 by Lestofante (talk | contribs) (New page: ==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...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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; } } }


--lestofante 21:16, 4 December 2008 (UTC)