package handling.world.messenger;
import client.MapleCharacter;
import database.DatabaseConnection;
import handling.world.WorldFindService;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import server.Timer.WorldTimer;
public class MessengerRankingWorker {
private final MapleCharacter[] rankingPlayer;
private final int[] rankingLove;
private final long[] lastUpdateTime;
public static MessengerRankingWorker getInstance() {
return SingletonHolder.instance;
}
private MessengerRankingWorker() {
this.rankingPlayer = new MapleCharacter[2];
for (int i = 0; i < this.rankingPlayer.length; i++) {
this.rankingPlayer[i] = null;
}
this.rankingLove = new int[2];
for (int i = 0; i < this.rankingLove.length; i++) {
this.rankingLove[i] = 0;
}
this.lastUpdateTime = new long[2];
for (int i = 0; i < this.lastUpdateTime.length; i++) {
this.lastUpdateTime[i] = 0L;
}
WorldTimer.getInstance().register(new Runnable() {
@Override
public void run() {
MessengerRankingWorker.this.updateRankFromDB();
}
}, 10800000L);
// System.err.println("[MessengerRankingWorker] 启动完成");
}
public void updateRankFromDB() {
String malesql = "SELECT chr.id, chr.gender, chr.love FROM characters AS chr LEFT JOIN accounts AS acc ON chr.accountid = acc.id WHERE chr.gm = 0 AND chr.gender = 0 AND acc.banned = 0 AND chr.love > 0 ORDER BY chr.love LIMIT 1";
String femalesql = "SELECT chr.id, chr.gender, chr.love FROM characters AS chr LEFT JOIN accounts AS acc ON chr.accountid = acc.id WHERE chr.gm = 0 AND chr.gender = 1 AND acc.banned = 0 AND chr.love > 0 ORDER BY chr.love LIMIT 1";
Connection con = DatabaseConnection.getConnection();
try {
PreparedStatement ps = con.prepareStatement(malesql);
ResultSet rs = ps.executeQuery();
int maleId = 0;
int malelove = 0;
if (rs.next()) {
maleId = rs.getInt("id");
malelove = rs.getInt("love");
}
rs.close();
ps.close();
MapleCharacter malechr = null;
if (maleId > 0) {
malechr = WorldFindService.getInstance().findCharacterById(maleId);
if (malechr == null) {
malechr = MapleCharacter.loadCharFromDB(maleId, null, false);
}
}
this.rankingPlayer[0] = malechr;
this.rankingLove[0] = malelove;
this.lastUpdateTime[0] = System.currentTimeMillis();
if (maleId > 0) {
//System.err.println(new StringBuilder().append("更新聊天招待人气排行榜 男角色 - Id: ").append(StringUtil.getRightPaddedStr(String.valueOf(maleId), ' ', 6)).append(" 好感度: ").append(StringUtil.getRightPaddedStr(String.valueOf(malelove), ' ', 4)).append(" 名字: ").append(malechr != null ? malechr.getName() : "????").toString());
} else {
//System.err.println("更新聊天招待人气排行榜 男角色 - 暂无信息... ");
}
ps = con.prepareStatement(femalesql);
rs = ps.executeQuery();
int femaleId = 0;
int femalelove = 0;
if (rs.next()) {
femaleId = rs.getInt("id");
femalelove = rs.getInt("love");
}
rs.close();
ps.close();
MapleCharacter femalechr = null;
if (femaleId > 0) {
femalechr = WorldFindService.getInstance().findCharacterById(femaleId);
if (femalechr == null) {
femalechr = MapleCharacter.loadCharFromDB(femaleId, null, false);
}
}
this.rankingPlayer[1] = femalechr;
this.rankingLove[1] = femalelove;
this.lastUpdateTime[1] = System.currentTimeMillis();
if (femaleId > 0) {
//System.err.println(new StringBuilder().append("更新聊天招待人气排行榜 女角色 - Id: ").append(StringUtil.getRightPaddedStr(String.valueOf(femaleId), ' ', 6)).append(" 好感度: ").append(StringUtil.getRightPaddedStr(String.valueOf(femalelove), ' ', 4)).append(" 名字: ").append(femalechr != null ? femalechr.getName() : "????").toString());
} else {
//System.err.println("更新聊天招待人气排行榜 女角色 - 暂无信息... ");
}
} catch (SQLException se) {
//System.err.println(new StringBuilder().append("更新聊天招待人气排行榜失败..").append(se).toString());
}
}
public void updateRankFromPlayer(MapleCharacter chr) {
if ((chr == null) || (chr.isGM())) {
return;
}
int num = chr.getGender();
if (chr.getLove() > this.rankingLove[num]) {
this.rankingPlayer[num] = chr;
this.rankingLove[num] = chr.getLove();
this.lastUpdateTime[num] = System.currentTimeMillis();
}
}
public MapleCharacter getRankingPlayer(int num) {
return this.rankingPlayer[num];
}
public int getRankingLove(int num) {
return this.rankingLove[num];
}
public long getLastUpdateTime(int num) {
return this.lastUpdateTime[num];
}
public void resetLastUpdateTime(int num) {
this.lastUpdateTime[num] = System.currentTimeMillis();
}
private static class SingletonHolder {
protected static final MessengerRankingWorker instance = new MessengerRankingWorker();
}
}