Example usage for com.google.common.io ByteArrayDataOutput write

List of usage examples for com.google.common.io ByteArrayDataOutput write

Introduction

In this page you can find the example usage for com.google.common.io ByteArrayDataOutput write.

Prototype

@Override
    void write(byte b[]);

Source Link

Usage

From source file:io.github.runelynx.runicparadise.RunicParadise.java

@SuppressWarnings("deprecation")
public void updatePlayerInfoOnJoin(String name, UUID pUUID) {
    final Date now = new Date();
    final String playerName = name;
    final UUID playerUUID = pUUID;

    MySQL MySQL = new MySQL(instance, instance.getConfig().getString("dbHost"),
            instance.getConfig().getString("dbPort"), instance.getConfig().getString("dbDatabase"),
            instance.getConfig().getString("dbUser"), instance.getConfig().getString("dbPassword"));
    final Connection dbConn = MySQL.openConnection();
    int rowCount = -1;
    int rowCountnameMatch = -1;
    String previousName = "";

    try {/*from   w  ww  .ja v  a2  s .c om*/
        PreparedStatement dStmt = dbConn
                .prepareStatement("SELECT COUNT(*) as Total, PlayerName FROM rp_PlayerInfo WHERE UUID = ?;");
        dStmt.setString(1, playerUUID.toString());
        ResultSet dbResult = dStmt.executeQuery();
        while (dbResult.next()) {
            rowCount = dbResult.getInt("Total");
            previousName = dbResult.getString("PlayerName");
        }
        dStmt.close();

        PreparedStatement zStmt = dbConn
                .prepareStatement("SELECT COUNT(*) as Total FROM rp_PlayerInfo WHERE PlayerName = ?;");
        zStmt.setString(1, playerName);
        ResultSet zResult = zStmt.executeQuery();
        while (zResult.next()) {
            rowCountnameMatch = zResult.getInt("Total");
        }
        zStmt.close();

    } catch (SQLException e) {
        getLogger().log(Level.SEVERE, "Cant check for row count in updatePlayerInfoOnJoin for " + playerName
                + " because: " + e.getMessage());
    }

    if (rowCount != rowCountnameMatch) {
        Bukkit.dispatchCommand(Bukkit.getConsoleSender(),
                "sc Name change detected for " + playerName + " (" + previousName + ")");
        Bukkit.getLogger().log(Level.INFO,
                "[RP] Name change detected for " + playerName + " (" + previousName + ")");
    }

    try {

        // if this player has no rows in the table yet

        if (rowCount == 0) {

            Bukkit.getServer().getScheduler().scheduleAsyncDelayedTask(instance, new Runnable() {
                public void run() {
                    // tell the other server this one is reconnected
                    // to the universe
                    ByteArrayDataOutput out = ByteStreams.newDataOutput();
                    out.writeUTF("Forward"); // So BungeeCord knows
                    // to forward it
                    out.writeUTF("ONLINE");
                    out.writeUTF("NewPlayer"); // The channel name
                    // to check if this
                    // your data

                    ByteArrayOutputStream msgbytes = new ByteArrayOutputStream();
                    DataOutputStream msgout = new DataOutputStream(msgbytes);

                    try {
                        msgout.writeUTF(Bukkit.getPlayer(playerUUID).getDisplayName()); // You
                        // can
                        // do
                        // anything
                        // msgout
                        msgout.writeShort(123);
                    } catch (IOException e) {
                    }

                    out.writeShort(msgbytes.toByteArray().length);
                    out.write(msgbytes.toByteArray());

                    // If you don't care about the player
                    // Player player =
                    // Iterables.getFirst(Bukkit.getOnlinePlayers(),
                    // null);
                    // Else, specify them

                    Bukkit.getPlayer(playerUUID).sendPluginMessage(instance, "BungeeCord", out.toByteArray());
                }
            }, 140);

            // /////////////////////
            PreparedStatement dStmt = dbConn.prepareStatement(
                    "INSERT INTO rp_PlayerInfo (`PlayerName`, `UUID`, `ActiveFaith`, `LastIP`, `FirstSeen`, `LastSeen`) VALUES "
                            + "(?, ?, ?, ?, ?, ?);");
            dStmt.setString(1, playerName);
            dStmt.setString(2, playerUUID.toString());
            dStmt.setString(3, "Sun");
            dStmt.setString(4, Bukkit.getPlayer(playerUUID).getAddress().getAddress().getHostAddress());
            dStmt.setLong(5, now.getTime());
            dStmt.setLong(6, now.getTime());

            dStmt.executeUpdate();

            PreparedStatement pStmt = dbConn
                    .prepareStatement("INSERT INTO rp_PlayerMobKills (`UUID`) VALUES " + "(?);");
            pStmt.setString(1, playerUUID.toString());
            pStmt.executeUpdate();

            pStmt.close();
            dStmt.close();

            // if this player has 1 row in the table
        } else if (rowCount == 1) {
            PreparedStatement dStmt = dbConn.prepareStatement(
                    "UPDATE `rp_PlayerInfo` SET LastSeen=?, PlayerName=?, LastIP=? WHERE UUID=?;");
            dStmt.setLong(1, now.getTime());
            dStmt.setString(2, playerName);
            dStmt.setString(3, Bukkit.getPlayer(playerUUID).getAddress().getAddress().getHostAddress());
            dStmt.setString(4, playerUUID.toString());
            dStmt.executeUpdate();
            dStmt.close();
            Bukkit.getLogger().log(Level.INFO, "[RP] PlayerInfo data updated for " + playerName);

            // if this player has MORE than 1 row in the
            // table
        } else if (rowCount > 1) {
            int counter = 1;
            PreparedStatement zStmt = dbConn
                    .prepareStatement("SELECT * FROM rp_PlayerInfo WHERE UUID = ? ORDER BY ID ASC;");
            zStmt.setString(1, playerUUID.toString());
            ResultSet zResult = zStmt.executeQuery();
            while (zResult.next()) {
                // The first row is our valid one - update
                // it!
                if (counter == 1) {
                    PreparedStatement dStmt = dbConn.prepareStatement(
                            "UPDATE `rp_PlayerInfo` SET LastSeen=?, PlayerName=? WHERE UUID=?;");
                    dStmt.setLong(1, now.getTime());
                    dStmt.setString(2, playerName);
                    dStmt.setString(3, playerUUID.toString());
                    dStmt.executeUpdate();
                    dStmt.close();

                    Bukkit.getLogger().log(Level.INFO, "[RP] PlayerInfo data [row " + zResult.getInt("ID")
                            + "] updated for " + playerName);
                    // All further rows are invalid, delete
                    // them!
                } else if (counter > 1) {
                    PreparedStatement dStmt = dbConn
                            .prepareStatement("DELETE FROM `rp_PlayerInfo` WHERE ID = ? LIMIT 1;");
                    dStmt.setInt(1, zResult.getInt("ID"));
                    dStmt.executeUpdate();
                    dStmt.close();
                    Bukkit.getLogger().log(Level.INFO,
                            "[RP] PlayerInfo dupe row cleanup (name change?)! Deleted row "
                                    + zResult.getInt("ID"));
                }

                counter++;
            }
            zStmt.close();

        }

        dbConn.close();

    } catch (SQLException e) {
        getLogger().log(Level.SEVERE,
                "Cant work with DB updatePlayerInfoOnJoin for " + playerName + " because: " + e.getMessage());
    }

}