package fr.ynerant.tarot; import android.annotation.SuppressLint; import android.preference.PreferenceManager; import android.widget.Toast; import androidx.annotation.NonNull; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.Executors; public class Player { @SuppressLint("UseSparseArrays") private static final Map PLAYERS = new HashMap<>(); public static Player THIS_PLAYER; private int id; private String name; private int score3, score4, score5, score6; public int getId() { return id; } public String getName() { return name; } public int getScore(Game.GameType type) { switch (type) { case THREE_PLAYERS: return score3; case FOUR_PLAYERS: return score4; case FIVE_PLAYERS: return score5; case SIX_PLAYERS: return score6; default: return 0; } } public void setScore(Game.GameType type, int score) { switch (type) { case THREE_PLAYERS: score3 = score; break; case FOUR_PLAYERS: score4 = score; break; case FIVE_PLAYERS: score5 = score; break; case SIX_PLAYERS: score6 = score; break; } } public void addScore(Game.GameType type, int score) { setScore(type, getScore(type) + score); } @Override public boolean equals(Object obj) { return obj instanceof Player && ((Player) obj).getId() == getId(); } public static void updatePlayers() { Executors.newSingleThreadExecutor().execute(new Runnable() { @Override public void run() { try { URL url = new URL("https://ynerant.fr/tarot/player.php"); final HttpURLConnection co = (HttpURLConnection) url.openConnection(); co.setRequestMethod("POST"); co.setRequestProperty("token", PreferenceManager.getDefaultSharedPreferences(MainActivity.INSTANCE).getString("token", null)); co.connect(); final List players = new Gson().fromJson(new InputStreamReader(co.getInputStream()), new TypeToken>(){}.getType()); PLAYERS.clear(); for (Player p : players) { PLAYERS.put(p.getId(), p); } THIS_PLAYER = PLAYERS.get(PreferenceManager.getDefaultSharedPreferences(MainActivity.INSTANCE).getInt("user_id", 0)); MainActivity.INSTANCE.runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.INSTANCE, "Bienvenue " + THIS_PLAYER.getName() + " !", Toast.LENGTH_SHORT).show(); } }); Game.updateGames(); } catch (IOException ex) { ex.printStackTrace(); } } }); } public static Collection getAllPlayers() { List list = new ArrayList<>(PLAYERS.values()); list.sort(new Comparator() { @Override public int compare(Player o1, Player o2) { return String.CASE_INSENSITIVE_ORDER.compare(o1.getName(), o2.getName()); } }); return list; } public static Player getPlayerById(int id) { return PLAYERS.get(id); } @NonNull @Override public String toString() { return name; } }