diff --git a/code/PtiClic/AndroidManifest.xml b/code/PtiClic/AndroidManifest.xml index dd8018f..30b6d44 100644 --- a/code/PtiClic/AndroidManifest.xml +++ b/code/PtiClic/AndroidManifest.xml @@ -14,7 +14,7 @@ - + diff --git a/code/PtiClic/src/org/pticlic/Score.java b/code/PtiClic/src/org/pticlic/Score.java index 8d7a1de..105c264 100644 --- a/code/PtiClic/src/org/pticlic/Score.java +++ b/code/PtiClic/src/org/pticlic/Score.java @@ -1,11 +1,16 @@ package org.pticlic; +import org.pticlic.exception.PtiClicException; import org.pticlic.model.Constant; import org.pticlic.model.Match; import org.pticlic.model.Network; import org.pticlic.model.Network.Mode; + import android.app.Activity; +import android.app.AlertDialog; +import android.app.ProgressDialog; +import android.content.DialogInterface; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; @@ -20,7 +25,7 @@ import android.widget.Button; */ public class Score extends Activity implements OnClickListener{ - private Match gamePlayed; + private Match gamePlayed; @Override protected void onCreate(Bundle savedInstanceState) { @@ -42,7 +47,23 @@ public class Score extends Activity implements OnClickListener{ Network network = new Network(serverURL, mode, id, passwd); // FIXME : Pour l'instant ne marche pas, attend de savoir comment est formater le score que l'on recois. - //DownloadedScore score = network.sendGame(gamePlayed); + try { + network.sendGame(gamePlayed); + } catch (PtiClicException e) { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(getString(R.string.app_name)) + .setIcon(android.R.drawable.ic_dialog_alert) + .setMessage(e.getMessage()) + .setCancelable(false) + .setNegativeButton("Ok", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + finish(); + } + }); + AlertDialog alert = builder.create(); + alert.show(); + } ((Button)findViewById(R.id.saw)).setOnClickListener(this); diff --git a/code/PtiClic/src/exception/PtiClicException.java b/code/PtiClic/src/org/pticlic/exception/PtiClicException.java similarity index 83% rename from code/PtiClic/src/exception/PtiClicException.java rename to code/PtiClic/src/org/pticlic/exception/PtiClicException.java index f6ea775..aa2d73a 100644 --- a/code/PtiClic/src/exception/PtiClicException.java +++ b/code/PtiClic/src/org/pticlic/exception/PtiClicException.java @@ -1,4 +1,4 @@ -package exception; +package org.pticlic.exception; import java.io.Serializable; @@ -9,7 +9,7 @@ public class PtiClicException extends Exception { private static final long serialVersionUID = 1L; private Error error; - private static class Error implements Serializable { + public static class Error implements Serializable { private static final long serialVersionUID = 1L; private int num; @@ -31,6 +31,10 @@ public class PtiClicException extends Exception { } } + public PtiClicException(Error error) { + this.error = error; + } + public PtiClicException(int num, String msg) { this.error = new Error(num, msg); } diff --git a/code/PtiClic/src/org/pticlic/games/BaseGame.java b/code/PtiClic/src/org/pticlic/games/BaseGame.java index 3280e00..3b0c103 100644 --- a/code/PtiClic/src/org/pticlic/games/BaseGame.java +++ b/code/PtiClic/src/org/pticlic/games/BaseGame.java @@ -2,6 +2,7 @@ package org.pticlic.games; import org.pticlic.R; import org.pticlic.Score; +import org.pticlic.exception.PtiClicException; import org.pticlic.model.Constant; import org.pticlic.model.DownloadedBaseGame; import org.pticlic.model.Match; @@ -9,7 +10,6 @@ import org.pticlic.model.Network; import org.pticlic.model.Network.Mode; import org.pticlic.model.Relation; -import exception.PtiClicException; import android.app.Activity; import android.app.AlertDialog; @@ -234,7 +234,6 @@ public class BaseGame extends Activity implements OnClickListener { leaveView(); start(); } else { - network.sendGame(match); Intent intent = new Intent(this, Score.class); intent.putExtra(Constant.SCORE_GAMEPLAYED, match); intent.putExtra(Constant.SCORE_MODE, Mode.SIMPLE_GAME); diff --git a/code/PtiClic/src/org/pticlic/model/Network.java b/code/PtiClic/src/org/pticlic/model/Network.java index 5bed251..002c149 100644 --- a/code/PtiClic/src/org/pticlic/model/Network.java +++ b/code/PtiClic/src/org/pticlic/model/Network.java @@ -8,13 +8,14 @@ import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.URL; +import org.pticlic.exception.PtiClicException; + import android.content.Context; import android.net.ConnectivityManager; import com.google.gson.Gson; import com.google.gson.stream.JsonReader; -import exception.PtiClicException; /** * @author Bertrand BRUN @@ -235,8 +236,14 @@ public class Network { reader.endObject(); return new DownloadedBaseGame(id, gid, pgid, cat1, cat2, cat3, cat4, center, cloud); } - - public TotalScore sendGame(Match game) { + + /** + * Cette méthode permet d'envoyer les parties au serveur pour qu'il puisse les + * rajouter à la base de données, et calculer le score. + * @param game La partie jouee par l'utilisateur + * @return Le score sous forme JSON. + */ + public TotalScore sendGame(Match game) throws PtiClicException { switch (mode) { case SIMPLE_GAME: return sendBaseGame(game); @@ -244,15 +251,14 @@ public class Network { return null; } } - - /** - * Cette méthode permet d'envoyer les parties au serveur pour qu'il puisse les - * rajouter à la base de données, et calculer le score. - * @param game La partie jouee par l'utilisateur - * @return Le score sous forme JSON. - */ - public TotalScore sendBaseGame(Match game) { + + + public TotalScore sendBaseGame(Match game) throws PtiClicException { TotalScore score = null; + URL url = null; + Gson gson = null; + BufferedReader reader = null; + String json = null; try { // TODO : ne restera le temps que les requete du serveur passe du GET au POST @@ -278,7 +284,7 @@ public class Network { urlS += "&" + i + "=" + ((DownloadedBaseGame)game.getGame()).getCat4(); } - URL url = new URL(urlS); + url = new URL(urlS); // URL url = new URL(this.serverURL); // URLConnection connection = url.openConnection(); @@ -288,16 +294,30 @@ public class Network { // connection.addRequestProperty("mode", mode.value()); // connection.addRequestProperty("pgid", String.valueOf(game.getGame().getId())); - Gson gson = new Gson(); -// JsonReader reader = new JsonReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); - JsonReader reader = new JsonReader(new InputStreamReader(url.openStream(), "UTF-8")); + reader = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8")); + json = reader.readLine(); + + gson = new Gson(); + //JsonReader reader = new JsonReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); + InputStream in = new ByteArrayInputStream(json.getBytes("UTF-8")); + JsonReader jsonReader = new JsonReader(new InputStreamReader(in)); - score = gson.fromJson(reader, TotalScore.class); + // Comme gson ne renvoie pas une erreur si l'objet qui recupere ne correspond pas a la classe qu'il attends. + // On creer tout d'abord une objet error et si celui-ci est vide on creer l'objet score, sinon on lance + // une exception. + PtiClicException.Error error = gson.fromJson(json, PtiClicException.Error.class); + if (error.getMsg() == null) { + score = gson.fromJson(jsonReader, TotalScore.class); + } else { + throw new PtiClicException(error); + } - - } catch (IOException e) { - return score; + } catch (UnsupportedEncodingException e1) { + throw new PtiClicException(0, "Impossible de recuperer l'erreur, nous avons pris note de cette erreur.\n Merci"); + } catch (IOException e1) { + throw new PtiClicException(0, "Impossible de recuperer l'erreur, nous avons pris note de cette erreur.\n Merci"); } + return score; } }