// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ . // ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌· // ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀ // ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌ // ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀ // Magicbane Emulator Project © 2013 - 2022 // www.magicbane.com package engine.db.archive; import engine.gameManager.DbManager; import engine.mbEnums; import engine.mbEnums.RecordEventType; import engine.objects.Guild; import engine.workthreads.WarehousePushThread; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.HashMap; import java.util.concurrent.LinkedBlockingQueue; public class GuildRecord extends DataRecord { private static final LinkedBlockingQueue recordPool = new LinkedBlockingQueue<>(); public static HashMap GuildRecordCache = null; public String guildHash; public int guildID; private mbEnums.RecordEventType eventType; private Guild guild; private String guildName; private String charterName; private String GLHash; private String guildMotto; private int bgIcon; private int bgColour1; private int bgColour2; private int fgIcon; private int fgColour; private java.time.LocalDateTime eventDatetime; private GuildRecord(Guild guild) { this.recordType = mbEnums.DataRecordType.GUILD; this.guild = guild; this.eventType = mbEnums.RecordEventType.CREATE; } public GuildRecord(ResultSet rs) throws SQLException { super(); this.eventType = RecordEventType.valueOf(rs.getString("eventType")); this.guildHash = rs.getString("guild_id"); this.guildName = rs.getString("guild_name"); this.charterName = rs.getString("charter"); GLHash = rs.getString("guild_founder"); this.guildMotto = rs.getString("guild_motto"); this.bgIcon = rs.getInt("bgicon"); this.bgColour1 = rs.getInt("bgcoloura"); this.bgColour2 = rs.getInt("bgcolourb"); this.fgIcon = rs.getInt("fgicon"); this.fgColour = rs.getInt("fgcolour"); java.sql.Timestamp eventTimeStamp = rs.getTimestamp("upgradeDate"); if (eventTimeStamp != null) this.eventDatetime = LocalDateTime.ofInstant(eventTimeStamp.toInstant(), ZoneId.systemDefault()); } public static GuildRecord borrow(Guild guild, mbEnums.RecordEventType eventType) { GuildRecord guildRecord; //add guildRecord = recordPool.poll(); if (guildRecord == null) { guildRecord = new GuildRecord(guild); guildRecord.eventType = eventType; } else { guildRecord.guild = guild; guildRecord.recordType = mbEnums.DataRecordType.GUILD; guildRecord.eventType = eventType; } guildRecord.guildHash = guildRecord.guild.getHash(); guildRecord.guildID = guildRecord.guild.getObjectUUID(); guildRecord.guildName = guildRecord.guild.getName(); guildRecord.charterName = mbEnums.GuildCharterType.getGuildTypeFromInt(guildRecord.guild.getCharter()).getCharterName(); guildRecord.GLHash = DataWarehouse.hasher.encrypt(guildRecord.guild.getGuildLeaderUUID()); guildRecord.guildMotto = guildRecord.guild.getMotto(); guildRecord.bgIcon = guildRecord.guild.getBgDesign(); guildRecord.bgColour1 = guildRecord.guild.getBgc1(); guildRecord.bgColour2 = guildRecord.guild.getBgc2(); guildRecord.fgIcon = guildRecord.guild.getSymbol(); guildRecord.fgColour = guildRecord.guild.getSc(); if (guild.getOwnedCity() != null) guildRecord.eventDatetime = guild.getOwnedCity().established; else guildRecord.eventDatetime = LocalDateTime.now(); return guildRecord; } public static PreparedStatement buildGuildPushStatement(Connection connection, ResultSet rs) throws SQLException { PreparedStatement outStatement = null; String queryString = "INSERT INTO `warehouse_guildhistory` (`event_number`, `guild_id`, `guild_name`, `guild_motto`, `guild_founder`, `charter`, `bgicon`, `bgcoloura`, `bgcolourb`, `fgicon`, `fgcolour`, `eventtype`, `datetime`) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)"; outStatement = connection.prepareStatement(queryString); // Bind record data outStatement.setInt(1, rs.getInt("event_number")); outStatement.setString(2, rs.getString("guild_id")); outStatement.setString(3, rs.getString("guild_name")); outStatement.setString(4, rs.getString("guild_motto")); outStatement.setString(5, rs.getString("guild_founder")); outStatement.setString(6, rs.getString("charter")); outStatement.setInt(7, rs.getInt("bgicon")); outStatement.setInt(8, rs.getInt("bgcoloura")); outStatement.setInt(9, rs.getInt("bgcolourb")); outStatement.setInt(10, rs.getInt("fgicon")); outStatement.setInt(11, rs.getInt("fgcolour")); outStatement.setString(12, rs.getString("eventtype")); outStatement.setTimestamp(13, rs.getTimestamp("datetime")); return outStatement; } public static PreparedStatement buildGuildQueryStatement(Connection connection) throws SQLException { PreparedStatement outStatement = null; String queryString = "SELECT * FROM `warehouse_guildhistory` WHERE `event_number` > ?"; outStatement = connection.prepareStatement(queryString); outStatement.setInt(1, WarehousePushThread.guildIndex); return outStatement; } void reset() { this.guild = null; this.guildHash = null; this.GLHash = null; this.guildMotto = null; this.charterName = null; this.eventDatetime = null; } public void release() { this.reset(); recordPool.add(this); } public void write() { try (Connection connection = DbManager.getConnection(); PreparedStatement statement = this.buildGuildInsertStatement(connection)) { statement.execute(); } catch (SQLException e) { e.printStackTrace(); } } private PreparedStatement buildGuildInsertStatement(Connection connection) throws SQLException { PreparedStatement outStatement = null; String queryString = "INSERT INTO `warehouse_guildhistory` (`guild_id`, `guild_name`, `guild_motto`, `guild_founder`, `charter`, `bgicon`, `bgcoloura`, `bgcolourb`, `fgicon`, `fgcolour`, `eventtype`, `datetime`) VALUES(?,?,?,?,?,?,?,?,?,?,?,?)"; outStatement = connection.prepareStatement(queryString); // Bind character data outStatement.setString(1, this.guildHash); outStatement.setString(2, this.guildName); outStatement.setString(3, this.guildMotto); outStatement.setString(4, this.GLHash); outStatement.setString(5, this.charterName); outStatement.setInt(6, this.bgIcon); outStatement.setInt(7, this.bgColour1); outStatement.setInt(8, this.bgColour2); outStatement.setInt(9, this.fgIcon); outStatement.setInt(10, this.fgColour); outStatement.setString(11, this.eventType.name()); outStatement.setTimestamp(12, new java.sql.Timestamp(this.eventDatetime.atZone(ZoneId.systemDefault()) .toInstant().toEpochMilli())); return outStatement; } // public static void InitializeGuildRecords(){ // GuildRecord.GuildRecordCache = DbManager.GuildQueries.GET_WAREHOUSE_GUILD_HISTORY(); // } }