package de.fau.cs.mad.fly.HttpClient; import java.util.ArrayList; import java.util.List; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Net.HttpMethods; import com.badlogic.gdx.Net.HttpRequest; import com.badlogic.gdx.Net.HttpResponse; import com.badlogic.gdx.Net.HttpResponseListener; import com.badlogic.gdx.net.HttpStatus; import com.badlogic.gdx.utils.JsonReader; import com.badlogic.gdx.utils.JsonValue; import de.fau.cs.mad.fly.profile.Score; public class PostHighscoreService { public class ResponseData { public int scoreID; public int rank; public List<ResponseItem> above = new ArrayList<ResponseItem>(); public List<ResponseItem> below = new ArrayList<ResponseItem>(); } public class ResponseItem { public int Score; public String Username; public int FlyID; public int rank; } public static class RequestData { public Score Score; public int LevelID; public int FlyID; public int LevelGroupID; } public PostHighscoreService(FlyHttpResponseListener listener, RequestData requestData) { this.listener = listener; this.requestData = requestData; } private final RequestData requestData; private final FlyHttpResponseListener listener; public void execute() { HttpRequest request = new HttpRequest(HttpMethods.POST); request.setTimeOut(RemoteServices.TIME_OUT); request.setHeader("Content-Type", "application/json"); request.setUrl(RemoteServices.getServerURL() + "/highscores"); String serverLevelId = RemoteServices.getServerLevelId(requestData.LevelGroupID, requestData.LevelID); String res = "{ \"highscore\": { \"points\": " + requestData.Score.getTotalScore() + ", \"user_id\": " + requestData.FlyID + ", \"level_group_id\": " + requestData.LevelGroupID + ", \"level_id\": " + serverLevelId + " } }"; request.setContent(res); Gdx.app.log("PostHighscoreService", "send:" + res); RemoteServices.sendHttpRequest(request, new HttpResponseListener() { @Override public void handleHttpResponse(HttpResponse httpResponse) { HttpStatus status = httpResponse.getStatus(); if (status.getStatusCode() == HttpStatus.SC_CREATED) { JsonReader reader = new JsonReader(); String ress = httpResponse.getResultAsString(); Gdx.app.log("PostHighscoreService", "Received:" + ress ); JsonValue json = reader.parse(ress); ResponseData response = new ResponseData(); JsonValue scoreJS = json.get("highscore"); response.scoreID = scoreJS.getInt("id"); response.rank = scoreJS.getInt("rank"); for (JsonValue item : json.get("above")) { ResponseItem res = new ResponseItem(); res.Score = item.getInt("points"); res.FlyID = item.get("user").getInt("id"); res.Username = item.get("user").getString("name"); response.above.add(res); Gdx.app.log("PostHighscoreService", "" + res.Score); } for (JsonValue item : json.get("below")) { ResponseItem res = new ResponseItem(); res.Score = item.getInt("points"); res.FlyID = item.get("user").getInt("id"); res.Username = item.get("user").getString("name"); response.below.add(res); Gdx.app.log("PostHighscoreService", "" + res.Score); } listener.successful(response); } else { listener.failed(String.valueOf(status.getStatusCode())); } Gdx.app.log("PostHighscoreService", "server return code: " + String.valueOf(status.getStatusCode())); } @Override public void failed(Throwable t) { listener.failed(t.getLocalizedMessage()); Gdx.app.log("PostHighscoreService", "server return msg:" + t.getMessage()); } @Override public void cancelled() { listener.cancelled(); } }); } }