Example usage for com.google.gson.internal LinkedHashTreeMap get

List of usage examples for com.google.gson.internal LinkedHashTreeMap get

Introduction

In this page you can find the example usage for com.google.gson.internal LinkedHashTreeMap get.

Prototype

@Override
    public V get(Object key) 

Source Link

Usage

From source file:codecrafter47.bungeetablistplus.managers.SkinManagerImpl.java

License:Open Source License

private void fetchHeadSkin(File file, byte[] headArray) {
    try {//from w  w w.  j av a2s. c o  m
        HttpURLConnection connection = (HttpURLConnection) new URL(
                "http://skinservice.codecrafter47.dyndns.eu/api/customhead").openConnection();
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type", "application/json");
        connection.setUseCaches(false);
        connection.setDoInput(true);
        connection.setDoOutput(true);
        try (DataOutputStream out = new DataOutputStream(connection.getOutputStream())) {
            out.write((Base64.getEncoder().encodeToString(headArray)).getBytes(Charsets.UTF_8));
            out.flush();
        }
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(connection.getInputStream(), Charsets.UTF_8));
        LinkedHashTreeMap map = gson.fromJson(reader, LinkedHashTreeMap.class);
        if (map.get("state").equals("ERROR")) {
            plugin.getLogger().warning("An server side error occurred while preparing head " + file.getName());
            fileSkinCache.put(file, missingSkinTexture);
        } else if (map.get("state").equals("QUEUED")) {
            plugin.getLogger().info("Preparing head " + file.getName() + " approx. " + map.get("timeLeft")
                    + " minutes remaining.");
            ProxyServer.getInstance().getScheduler().schedule(plugin, () -> fetchHeadSkin(file, headArray), 30,
                    TimeUnit.SECONDS);
        } else if (map.get("state").equals("SUCCESS")) {
            PlayerSkin skin = new PlayerSkin(null,
                    new String[][] { { "textures", (String) map.get("skin"), (String) map.get("signature") } });
            fileSkinCache.put(file, skin);
            headCache.put(Head.of(headArray), skin);
            plugin.getLogger().info("Head " + file.getName() + " is now ready for use.");

            // we received a new skin -> update tab to all players
            BungeeTabListPlus.getInstance().resendTabLists();

            // save to cache
            File cacheFile = new File(headsFolder, "cache.txt");
            if (!cacheFile.exists()) {
                cacheFile.createNewFile();
            }
            BufferedWriter writer = new BufferedWriter(new FileWriter(cacheFile, true));
            writer.write(Base64.getEncoder().encodeToString(headArray));
            writer.write(' ');
            writer.write(skin.toProperty()[0][1]);
            writer.write(' ');
            writer.write(skin.toProperty()[0][2]);
            writer.newLine();
            writer.close();
        } else {
            plugin.getLogger().severe("Unexpected response from server: " + map.get("state"));
            fileSkinCache.put(file, missingSkinTexture);
        }
    } catch (IOException ex) {
        plugin.getLogger().log(Level.WARNING,
                "An error occurred while trying to contact skinservice.codecrafter47.dyndns.eu", ex);
        plugin.getLogger().warning("Unable to prepare head " + file.getName());
        fileSkinCache.put(file, missingSkinTexture);
        ProxyServer.getInstance().getScheduler().schedule(plugin,
                () -> fileSkinCache.remove(file, missingSkinTexture), 30, TimeUnit.SECONDS);
    }
}

From source file:codecrafter47.bungeetablistplus.managers.SkinManagerImpl.java

License:Open Source License

@Override
public void createIcon(BufferedImage image, Consumer<Icon> callback) {
    if (image.getWidth() != 8 || image.getHeight() != 8) {
        throw new IllegalArgumentException("Image must be 8x8 px.");
    }/*from w w  w . j  a va  2  s.c om*/

    int[] rgb = image.getRGB(0, 0, 8, 8, null, 0, 8);
    ByteBuffer byteBuffer = ByteBuffer.allocate(rgb.length * 4);
    byteBuffer.asIntBuffer().put(rgb);
    byte[] headArray = byteBuffer.array();

    if (headCache.containsKey(Head.of(headArray))) {
        Skin skin1 = headCache.get(Head.of(headArray));
        callback.accept(new Icon(skin1.getOwner(), skin1.toProperty()));
        return;
    }

    try {
        HttpURLConnection connection = (HttpURLConnection) new URL(
                "http://skinservice.codecrafter47.dyndns.eu/api/customhead").openConnection();
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type", "application/json");
        connection.setUseCaches(false);
        connection.setDoInput(true);
        connection.setDoOutput(true);
        try (DataOutputStream out = new DataOutputStream(connection.getOutputStream())) {
            out.write((Base64.getEncoder().encodeToString(headArray)).getBytes(Charsets.UTF_8));
            out.flush();
        }
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(connection.getInputStream(), Charsets.UTF_8));
        LinkedHashTreeMap map = gson.fromJson(reader, LinkedHashTreeMap.class);
        if (map.get("state").equals("SUCCESS")) {
            PlayerSkin skin = new PlayerSkin(null,
                    new String[][] { { "textures", (String) map.get("skin"), (String) map.get("signature") } });
            headCache.put(Head.of(headArray), skin);

            // save to cache
            File cacheFile = new File(headsFolder, "cache.txt");
            if (!cacheFile.exists()) {
                cacheFile.createNewFile();
            }
            BufferedWriter writer = new BufferedWriter(new FileWriter(cacheFile, true));
            writer.write(Base64.getEncoder().encodeToString(headArray));
            writer.write(' ');
            writer.write(skin.toProperty()[0][1]);
            writer.write(' ');
            writer.write(skin.toProperty()[0][2]);
            writer.newLine();
            writer.close();

            callback.accept(new Icon(skin.getOwner(), skin.toProperty()));
        } else {
            ProxyServer.getInstance().getScheduler().schedule(plugin, () -> createIcon(image, callback), 5,
                    TimeUnit.SECONDS);
        }
    } catch (IOException ex) {
        plugin.getLogger().log(Level.WARNING,
                "An error occurred while trying to contact skinservice.codecrafter47.dyndns.eu", ex);
        ProxyServer.getInstance().getScheduler().schedule(plugin, () -> createIcon(image, callback), 1,
                TimeUnit.MINUTES);
    }
}