테스트

aion-server 4.8

Gitteol
최고관리자 · 1 · 💬 0 클론/새로받기
 4.8 61f661d · 1 commits 새로받기(Pull)
game-server/src/com/aionemu/gameserver/dao/AccountPassportsDAO.java
package com.aionemu.gameserver.dao;

import java.sql.*;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.aionemu.commons.database.DatabaseFactory;
import com.aionemu.gameserver.model.account.Account;
import com.aionemu.gameserver.model.account.Passport;
import com.aionemu.gameserver.model.account.PassportsList;
import com.aionemu.gameserver.model.gameobjects.Persistable.PersistentState;

/**
 * @author ViAl, Luzien
 */
public class AccountPassportsDAO {

	private static final Logger log = LoggerFactory.getLogger(AccountPassportsDAO.class);

	private static final String SELECT_QUERY = "SELECT `passport_id`, `rewarded`, `arrive_date` FROM `account_passports` WHERE `account_id`=?";
	private static final String UPDATE_QUERY = "UPDATE `account_passports` SET `rewarded`=? WHERE `account_id`=? AND `passport_id`=?";
	private static final String RESET_LASTSTAMPS_QUERY = "UPDATE `account_stamps` SET `last_stamp`=NULL";
	private static final String RESET_STAMPS_QUERY = "UPDATE `account_stamps` SET `stamps`=0";
	private static final String INSERT_QUERY = "INSERT INTO `account_passports` (`account_id`, `passport_id`, `rewarded`, `arrive_date`) VALUES (?,?,?,?)";
	private static final String DELETE_QUERY = "DELETE FROM `account_passports` WHERE account_id = ? AND passport_id = ? and arrive_date = ?";
	private static final String INSERT_STAMPS_QUERY = "INSERT INTO `account_stamps` (`account_id`, `stamps`, `last_stamp`) VALUES (?,?,?)";
	private static final String UPDATE_STAMPS_QUERY = "UPDATE `account_stamps` SET `stamps`= ?, `last_stamp`  = ? WHERE `account_id` = ?";
	private static final String SELECT_STAMPS_QUERY = "SELECT `stamps`, `last_stamp` FROM `account_stamps` WHERE `account_id`=?";

	public static void loadPassport(Account account) {
		PassportsList passportList = new PassportsList();
		try (Connection con = DatabaseFactory.getConnection()) {
			try (PreparedStatement stmt = con.prepareStatement(SELECT_QUERY)) {
				stmt.setInt(1, account.getId());
				ResultSet rset = stmt.executeQuery();
				while (rset.next()) {
					int passport_id = rset.getInt("passport_id");
					boolean rewarded = rset.getInt("rewarded") != 0;
					Timestamp arriveDate = rset.getTimestamp("arrive_date");
					Passport pp = new Passport(passport_id, rewarded, arriveDate);
					pp.setPersistentState(PersistentState.UPDATED);
					passportList.addPassport(pp);
				}
				account.setPassportsList(passportList);
			}
			try (PreparedStatement stmt = con.prepareStatement(SELECT_STAMPS_QUERY)) {
				stmt.setInt(1, account.getId());
				ResultSet rset = stmt.executeQuery();
				int stamps = 0;
				Timestamp lastStamp = null;
				if (rset.next()) {
					stamps = rset.getInt("stamps");
					lastStamp = rset.getTimestamp("last_stamp");
				} else {
					insertStamps(account.getId());
				}
				account.setPassportStamps(stamps);
				account.setLastStamp(lastStamp);
			}
		} catch (Exception e) {
			log.error("Could not restore completed passport data for account: " + account.getId() + " from DB", e);
		}
	}

	public static void storePassportList(int accountId, List<Passport> pList) {
		for (Passport passport : pList) {
			switch (passport.getPersistentState()) {
				case NEW:
					addPassports(accountId, passport);
					break;
				case UPDATE_REQUIRED:
					updatePassport(accountId, passport);
					break;
				case DELETED:
					deletePassport(accountId, passport);
					break;
			}
			passport.setPersistentState(PersistentState.UPDATED);
		}
	}

	public static void storePassport(Account account) {
		storePassportList(account.getId(), account.getPassportsList().getAllPassports());
		updateStamps(account);
	}

	private static void addPassports(int accountId, Passport passport) {
		try (Connection conn = DatabaseFactory.getConnection(); PreparedStatement ps = conn.prepareStatement(INSERT_QUERY)) {
			ps.setInt(1, accountId);
			ps.setInt(2, passport.getId());
			ps.setInt(3, passport.isRewarded() ? 1 : 0);
			ps.setTimestamp(4, passport.getArriveDate());
			ps.executeUpdate();
		} catch (SQLException e) {
			log.error("Error while adding passports for account " + accountId, e);
		}
	}

	private static void updatePassport(int accountId, Passport passport) {
		try (Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement(UPDATE_QUERY)) {
			ps.setInt(1, passport.isRewarded() ? 1 : 0);
			ps.setInt(2, accountId);
			ps.setInt(3, passport.getId());
			ps.executeUpdate();
		} catch (SQLException e) {
			log.error("Failed to update existing passports for account " + accountId, e);
		}
	}

	private static void deletePassport(int accountId, Passport passport) {
		try (Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement(DELETE_QUERY)) {
			ps.setInt(1, accountId);
			ps.setInt(2, passport.getId());
			ps.setTimestamp(3, passport.getArriveDate());
			ps.executeUpdate();
		} catch (SQLException e) {
			log.error("Failed to delete passports for account " + accountId, e);
		}
	}

	private static void insertStamps(int accountId) {
		try (Connection conn = DatabaseFactory.getConnection(); PreparedStatement ps = conn.prepareStatement(INSERT_STAMPS_QUERY)) {
			ps.setInt(1, accountId);
			ps.setInt(2, 0);
			ps.setTimestamp(3, null);
			ps.executeUpdate();
		} catch (SQLException e) {
			log.error("Error while adding stamos for account " + accountId, e);
		}
	}

	private static void updateStamps(Account account) {
		try (Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement(UPDATE_STAMPS_QUERY)) {
			ps.setInt(1, account.getPassportStamps());
			ps.setTimestamp(2, account.getLastStamp());
			ps.setInt(3, account.getId());
			ps.executeUpdate();
		} catch (SQLException e) {
			log.error("Failed to update existing passports for account " + account.getId(), e);
		}
	}

	public static void resetAllPassports() {
		try (Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement(RESET_LASTSTAMPS_QUERY)) {
			ps.executeUpdate();
		} catch (SQLException e) {
			log.error("Failed to reset all passports", e);
		}
	}

	public static void resetAllStamps() {
		try (Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement(RESET_STAMPS_QUERY)) {
			ps.executeUpdate();
		} catch (SQLException e) {
			log.error("Failed to reset all stamps", e);
		}
	}

}

📎 첨부파일

댓글 작성 권한이 없습니다.
🏆 포인트 랭킹 TOP 10
순위 닉네임 포인트
1 no_profile 타키야겐지쪽지보내기 자기소개 아이디로 검색 전체게시물 102,949
2 no_profile 동가리쪽지보내기 자기소개 아이디로 검색 전체게시물 63,733
3 no_profile 라프텔쪽지보내기 자기소개 아이디로 검색 전체게시물 51,771
4 no_profile 불멸의행복쪽지보내기 자기소개 아이디로 검색 전체게시물 36,923
5 서번트쪽지보내기 자기소개 아이디로 검색 전체게시물 35,011
6 no_profile 닥터스쪽지보내기 자기소개 아이디로 검색 전체게시물 29,470
7 no_profile 검은고양이쪽지보내기 자기소개 아이디로 검색 전체게시물 29,077
8 no_profile Revolution쪽지보내기 자기소개 아이디로 검색 전체게시물 28,199
9 no_profile 보거스쪽지보내기 자기소개 아이디로 검색 전체게시물 26,731
10 no_profile 호롤롤로쪽지보내기 자기소개 아이디로 검색 전체게시물 17,020
알림 0