Public Repository for the Magicbane Shadowbane Emulator
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

211 lines
8.0 KiB

// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// 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<GuildRecord> recordPool = new LinkedBlockingQueue<>();
public static HashMap<Integer, GuildRecord> 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();
// }
}