/* * This file is part of aion-emu <aion-emu.com>. * * aion-emu is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * aion-emu is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with aion-emu. If not, see <http://www.gnu.org/licenses/>. */ package mysql5; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.apache.log4j.Logger; import com.aionemu.commons.database.DB; import com.aionemu.commons.database.IUStH; import com.aionemu.loginserver.dao.AccountTimeDAO; import com.aionemu.loginserver.model.AccountTime; /** * MySQL5 AccountTimeDAO implementation * * @author EvilSpirit */ public class MySQL5AccountTimeDAO extends AccountTimeDAO { /** * Logger */ private static final Logger log = Logger.getLogger(MySQL5AccountTimeDAO.class); /** * {@inheritDoc} */ @Override public boolean updateAccountTime(final int accountId, final AccountTime accountTime) { return DB.insertUpdate("REPLACE INTO account_time (account_id, last_active, expiration_time, " + "session_duration, accumulated_online, accumulated_rest, penalty_end) values " + "(?,?,?,?,?,?,?)", new IUStH() { @Override public void handleInsertUpdate(PreparedStatement preparedStatement) throws SQLException { preparedStatement.setLong(1, accountId); preparedStatement.setTimestamp(2, accountTime.getLastLoginTime()); preparedStatement.setTimestamp(3, accountTime.getExpirationTime()); preparedStatement.setLong(4, accountTime.getSessionDuration()); preparedStatement.setLong(5, accountTime.getAccumulatedOnlineTime()); preparedStatement.setLong(6, accountTime.getAccumulatedRestTime()); preparedStatement.setTimestamp(7, accountTime.getPenaltyEnd()); preparedStatement.execute(); } }); } /** * {@inheritDoc} */ @Override public AccountTime getAccountTime(int accountId) { AccountTime accountTime = null; PreparedStatement st = DB.prepareStatement("SELECT * FROM account_time WHERE account_id = ?"); try { st.setLong(1, accountId); ResultSet rs = st.executeQuery(); if(rs.next()) { accountTime = new AccountTime(); accountTime.setLastLoginTime(rs.getTimestamp("last_active")); accountTime.setSessionDuration(rs.getLong("session_duration")); accountTime.setAccumulatedOnlineTime(rs.getLong("accumulated_online")); accountTime.setAccumulatedRestTime(rs.getLong("accumulated_rest")); accountTime.setPenaltyEnd(rs.getTimestamp("penalty_end")); accountTime.setExpirationTime(rs.getTimestamp("expiration_time")); } } catch (Exception e) { log.error("Can't get account time for account with id: " + accountId, e); } finally { DB.close(st); } return accountTime; } /** * {@inheritDoc} */ @Override public boolean supports(String database, int majorVersion, int minorVersion) { return MySQL5DAOUtils.supports(database, majorVersion, minorVersion); } }