// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ . // ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌· // ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀ // ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌ // ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀ // Magicbane Emulator Project © 2013 - 2022 // www.magicbane.com package engine.db.archive; import engine.Enum; import engine.gameManager.DbManager; import engine.objects.Realm; import engine.workthreads.WarehousePushThread; import java.sql.*; import java.time.LocalDateTime; import java.util.concurrent.LinkedBlockingQueue; public class RealmRecord extends DataRecord { private static final LinkedBlockingQueue recordPool = new LinkedBlockingQueue<>(); private Realm realm; private Enum.RecordEventType eventType; private String cityHash; private String guildHash; private String charterType; private LocalDateTime eventDateTime; private RealmRecord(Realm realm) { this.recordType = Enum.DataRecordType.REALM; this.realm = realm; this.eventType = Enum.RecordEventType.CAPTURE; } public static RealmRecord borrow(Realm realm, Enum.RecordEventType eventType) { RealmRecord realmRecord; realmRecord = recordPool.poll(); if (realmRecord == null) { realmRecord = new RealmRecord(realm); realmRecord.eventType = eventType; } else { realmRecord.recordType = Enum.DataRecordType.REALM; realmRecord.eventType = eventType; realmRecord.realm = realm; } realmRecord.cityHash = realm.getRulingCity().getHash(); realmRecord.guildHash = realm.getRulingCity().getGuild().getHash(); realmRecord.charterType = Enum.CharterType.getCharterTypeByID(realmRecord.realm.getCharterType()).name(); if (realmRecord.eventType.equals(Enum.RecordEventType.CAPTURE)) realmRecord.eventDateTime = realm.ruledSince; else realmRecord.eventDateTime = LocalDateTime.now(); return realmRecord; } public static PreparedStatement buildRealmPushStatement(Connection connection, ResultSet rs) throws SQLException { PreparedStatement outStatement = null; String queryString = "INSERT INTO `warehouse_realmhistory` (`event_number`, `realm_id`, `realm_name`, `charter`, `city_id`, `guild_id`, `eventType`, `datetime`) VALUES(?,?,?,?,?,?,?,?)"; outStatement = connection.prepareStatement(queryString); // Bind record data outStatement.setInt(1, rs.getInt("event_number")); outStatement.setString(2, rs.getString("realm_id")); outStatement.setString(3, rs.getString("realm_name")); outStatement.setString(4, rs.getString("charter")); outStatement.setString(5, rs.getString("city_id")); outStatement.setString(6, rs.getString("guild_id")); outStatement.setString(7, rs.getString("eventType")); outStatement.setTimestamp(8, rs.getTimestamp("datetime")); return outStatement; } public static PreparedStatement buildRealmQueryStatement(Connection connection) throws SQLException { PreparedStatement outStatement = null; String queryString = "SELECT * FROM `warehouse_realmhistory` WHERE `event_number` > ?"; outStatement = connection.prepareStatement(queryString); outStatement.setInt(1, WarehousePushThread.realmIndex); return outStatement; } void reset() { this.realm = null; this.cityHash = null; this.guildHash = null; this.eventDateTime = null; this.charterType = null; } public void release() { this.reset(); recordPool.add(this); } private PreparedStatement buildRealmInsertStatement(Connection connection) throws SQLException { PreparedStatement outStatement = null; String queryString = "INSERT INTO `warehouse_realmhistory` (`realm_id`, `realm_name`, `charter`, `city_id`, `guild_id`, `eventType`, `datetime`) VALUES(?,?,?,?,?,?,?)"; outStatement = connection.prepareStatement(queryString); // Bind Record Data outStatement.setString(1, realm.getHash()); outStatement.setString(2, realm.getRealmName()); outStatement.setString(3, charterType); outStatement.setString(4, cityHash); outStatement.setString(5, guildHash); outStatement.setString(6, eventType.name()); outStatement.setTimestamp(7, Timestamp.valueOf(this.eventDateTime)); return outStatement; } public void write() { try (Connection connection = DbManager.getConnection(); PreparedStatement statement = this.buildRealmInsertStatement(connection)) { statement.execute(); } catch (SQLException e) { e.printStackTrace(); } } }