Talk:RoboRumble/Development
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)
- [View source↑]
- [History↑]
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.