470 lines
9.1 KiB
Java
470 lines
9.1 KiB
Java
package ms.world;
|
|
|
|
import java.sql.Connection;
|
|
import java.sql.PreparedStatement;
|
|
import java.sql.ResultSet;
|
|
import java.sql.SQLException;
|
|
|
|
import ms.ServerConstants;
|
|
import ms.system.communication.ClanRepository;
|
|
import ms.system.communication.CommunicationInfo;
|
|
import ms.system.mysql.SQLManager;
|
|
import ms.world.info.UIDInfo;
|
|
|
|
/**
|
|
* Represents a player session.
|
|
* @author Emperor
|
|
*
|
|
*/
|
|
public final class PlayerSession {
|
|
|
|
/**
|
|
* The player's communication info.
|
|
*/
|
|
private CommunicationInfo communication = new CommunicationInfo(this);
|
|
|
|
/**
|
|
* The game server the player is currently in.
|
|
*/
|
|
private GameServer world;
|
|
|
|
/**
|
|
* The current clan.
|
|
*/
|
|
private ClanRepository clan;
|
|
|
|
/**
|
|
* The player's UID info.
|
|
*/
|
|
private UIDInfo uid;
|
|
|
|
/**
|
|
* The username.
|
|
*/
|
|
private final String username;
|
|
|
|
/**
|
|
* The password.
|
|
*/
|
|
private String password;
|
|
|
|
/**
|
|
* The player's rights.
|
|
*/
|
|
private int rights;
|
|
|
|
/**
|
|
* The world id.
|
|
*/
|
|
private int worldId;
|
|
|
|
/**
|
|
* If the player session is active.
|
|
*/
|
|
private boolean active;
|
|
|
|
/**
|
|
* The time stamp of last disconnection.
|
|
*/
|
|
private long disconnectionTime = 0l;
|
|
|
|
/**
|
|
* How long the player is banned for.
|
|
*/
|
|
private long banTime;
|
|
|
|
/**
|
|
* How long the player is muted for.
|
|
*/
|
|
private long muteTime;
|
|
|
|
/**
|
|
* The last world the player logged in.
|
|
*/
|
|
private int lastWorld = -1;
|
|
|
|
/**
|
|
* The chat icon.
|
|
*/
|
|
private int chatIcon;
|
|
|
|
/**
|
|
* Constructs a new {@code PlayerSession} {@code Object}.
|
|
* @param username The username.
|
|
* @param password The password.
|
|
* @param ipAddress The ip address.
|
|
* @param macAddress The mac address.
|
|
* @param computerName The computer name.
|
|
* @param serial The motherboard serial key.
|
|
*/
|
|
public PlayerSession(String username, String password, UIDInfo uid) {
|
|
this.username = username;
|
|
this.password = password;
|
|
this.uid = uid;
|
|
}
|
|
|
|
/**
|
|
* Parses the session's data from the database.
|
|
* @return {@code True} if parsed.
|
|
*/
|
|
public boolean parse() {
|
|
Connection connection = SQLManager.getConnection();
|
|
if (connection == null) {
|
|
return false;
|
|
}
|
|
ResultSet result = null;
|
|
PreparedStatement statement;
|
|
try {
|
|
statement = connection.prepareStatement("SELECT * FROM " + "members" + " WHERE " + "" + "username" + "='" + username.toLowerCase() + "' LIMIT 1");
|
|
result = statement.executeQuery();
|
|
if (result == null || !result.next()) {
|
|
SQLManager.close(connection);
|
|
return false;
|
|
}
|
|
rights = result.getInt("rights");
|
|
disconnectionTime = result.getLong("disconnectTime");
|
|
lastWorld = result.getInt("lastWorld");
|
|
banTime = result.getLong("banTime");
|
|
communication.parse(result);
|
|
uid.parse(result);
|
|
SQLManager.close(connection);
|
|
} catch (SQLException ex) {
|
|
ex.printStackTrace();
|
|
SQLManager.close(connection);
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Called when a session is removed.
|
|
*/
|
|
public void remove() {
|
|
if (world != null && world.getInfo().getRevision() == 498) {
|
|
return;
|
|
}
|
|
Connection connection = SQLManager.getConnection();
|
|
if (connection == null) {
|
|
return;
|
|
}
|
|
PreparedStatement statement;
|
|
try {
|
|
statement = connection.prepareStatement("UPDATE members SET disconnectTime = ?, lastWorld = ?, contacts = ?, blocked = ?, clanName = ?, currentClan = ?, clanReqs = ?, chatSettings = ?, online= ? WHERE username = ?");
|
|
statement.setLong(1, System.currentTimeMillis());
|
|
statement.setInt(2, worldId);
|
|
communication.save(statement);
|
|
statement.setBoolean(9, false);
|
|
statement.setString(10, username);
|
|
statement.executeUpdate();
|
|
SQLManager.close(connection);
|
|
} catch (SQLException e) {
|
|
e.printStackTrace();
|
|
SQLManager.close(connection);
|
|
}
|
|
communication.clear();
|
|
}
|
|
|
|
/**
|
|
* Gets a player session.
|
|
* @param username the username.
|
|
* @return the player session.
|
|
*/
|
|
public static PlayerSession get(String username) {
|
|
PlayerSession session = new PlayerSession(username, "", new UIDInfo());
|
|
if (!session.parse()) {
|
|
return null;
|
|
}
|
|
return session;
|
|
}
|
|
|
|
/**
|
|
* Configures the player session.
|
|
*/
|
|
public void configure() {
|
|
ClanRepository clan = ClanRepository.getClans().get(username);
|
|
if (clan != null) {
|
|
clan.setOwner(this);
|
|
}
|
|
Connection connection = SQLManager.getConnection();
|
|
if (connection == null) {
|
|
return;
|
|
}
|
|
PreparedStatement statement;
|
|
try {
|
|
statement = connection.prepareStatement("UPDATE members SET online = ?, lastWorld = ?, lastLogin = ? WHERE username = ?");
|
|
statement.setBoolean(1, true);
|
|
statement.setInt(2, worldId);
|
|
statement.setLong(3, System.currentTimeMillis());
|
|
statement.setString(4, username);
|
|
statement.execute();
|
|
SQLManager.close(connection);
|
|
} catch (SQLException e) {
|
|
e.printStackTrace();
|
|
SQLManager.close(connection);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Checks if the player has just moved worlds.
|
|
* @return {@code True} if so.
|
|
*/
|
|
public boolean hasMovedWorld() {
|
|
if (rights == 2) {
|
|
return false;
|
|
}
|
|
return System.currentTimeMillis() - disconnectionTime < ServerConstants.WORLD_SWITCH_DELAY;
|
|
}
|
|
|
|
/**
|
|
* Gets the username value.
|
|
* @return The username.
|
|
*/
|
|
public String getUsername() {
|
|
return username;
|
|
}
|
|
|
|
/**
|
|
* Gets the password value.
|
|
* @return The password.
|
|
*/
|
|
public String getPassword() {
|
|
return password;
|
|
}
|
|
|
|
/**
|
|
* Gets the chat icon.
|
|
* @return The chat icon.
|
|
*/
|
|
public int getChatIcon() {
|
|
return chatIcon;
|
|
}
|
|
|
|
/**
|
|
* Gets the ipAddress value.
|
|
* @return The ipAddress.
|
|
*/
|
|
public String getIpAddress() {
|
|
return uid.getIp();
|
|
}
|
|
|
|
/**
|
|
* Gets the macAddress value.
|
|
* @return The macAddress.
|
|
*/
|
|
public String getMacAddress() {
|
|
return uid.getMac();
|
|
}
|
|
|
|
/**
|
|
* Gets the computerName value.
|
|
* @return The computerName.
|
|
*/
|
|
public String getComputerName() {
|
|
return uid.getCompName();
|
|
}
|
|
|
|
/**
|
|
* Gets the worldId value.
|
|
* @return The worldId.
|
|
*/
|
|
public int getWorldId() {
|
|
return worldId;
|
|
}
|
|
|
|
/**
|
|
* Sets the worldId value.
|
|
* @param worldId The worldId to set.
|
|
*/
|
|
public void setWorldId(int worldId) {
|
|
this.worldId = worldId;
|
|
}
|
|
|
|
/**
|
|
* Gets the active value.
|
|
* @return The active.
|
|
*/
|
|
public boolean isActive() {
|
|
return active;
|
|
}
|
|
|
|
/**
|
|
* Sets the active value.
|
|
* @param active The active to set.
|
|
*/
|
|
public void setActive(boolean active) {
|
|
this.active = active;
|
|
}
|
|
|
|
/**
|
|
* Gets the serialKey value.
|
|
* @return The serialKey.
|
|
*/
|
|
public String getSerialKey() {
|
|
return uid.getSerial();
|
|
}
|
|
|
|
/**
|
|
* Gets the rights value.
|
|
* @return The rights.
|
|
*/
|
|
public int getRights() {
|
|
return rights;
|
|
}
|
|
|
|
/**
|
|
* Sets the rights value.
|
|
* @param rights The rights to set.
|
|
*/
|
|
public void setRights(int rights) {
|
|
this.rights = rights;
|
|
}
|
|
|
|
/**
|
|
* If the player is banned.
|
|
* @return {@code true} if so.
|
|
*/
|
|
public boolean isBanned() {
|
|
return banTime > System.currentTimeMillis();
|
|
}
|
|
|
|
/**
|
|
* Gets the banTime value.
|
|
* @return The banTime.
|
|
*/
|
|
public long getBanTime() {
|
|
return banTime;
|
|
}
|
|
|
|
/**
|
|
* Gets the muteTime.
|
|
* @return the muteTime.
|
|
*/
|
|
public long getMuteTime() {
|
|
return muteTime;
|
|
}
|
|
|
|
|
|
/**
|
|
* Sets the muteTime.
|
|
* @param muteTime the muteTime to set
|
|
*/
|
|
public void setMuteTime(long muteTime) {
|
|
this.muteTime = muteTime;
|
|
}
|
|
|
|
|
|
/**
|
|
* Gets the disconnectionTime value.
|
|
* @return The disconnectionTime.
|
|
*/
|
|
public long getDisconnectionTime() {
|
|
return disconnectionTime;
|
|
}
|
|
|
|
/**
|
|
* Gets the lastWorld value.
|
|
* @return The lastWorld.
|
|
*/
|
|
public int getLastWorld() {
|
|
return lastWorld;
|
|
}
|
|
|
|
/**
|
|
* Sets the lastWorld value.
|
|
* @param lastWorld The lastWorld to set.
|
|
*/
|
|
public void setLastWorld(int lastWorld) {
|
|
this.lastWorld = lastWorld;
|
|
}
|
|
|
|
/**
|
|
* Gets the communication value.
|
|
* @return The communication.
|
|
*/
|
|
public CommunicationInfo getCommunication() {
|
|
return communication;
|
|
}
|
|
|
|
/**
|
|
* Sets the communication value.
|
|
* @param communication The communication to set.
|
|
*/
|
|
public void setCommunication(CommunicationInfo communication) {
|
|
this.communication = communication;
|
|
}
|
|
|
|
/**
|
|
* Gets the world value.
|
|
* @return The world.
|
|
*/
|
|
public GameServer getWorld() {
|
|
return world;
|
|
}
|
|
|
|
/**
|
|
* Sets the world value.
|
|
* @param world The world to set.
|
|
*/
|
|
public void setWorld(GameServer world) {
|
|
this.world = world;
|
|
}
|
|
|
|
/**
|
|
* Gets the clan value.
|
|
* @return The clan.
|
|
*/
|
|
public ClanRepository getClan() {
|
|
return clan;
|
|
}
|
|
|
|
/**
|
|
* Sets the clan value.
|
|
* @param clan The clan to set.
|
|
*/
|
|
public void setClan(ClanRepository clan) {
|
|
this.clan = clan;
|
|
}
|
|
|
|
/**
|
|
* Sets the chat icon.
|
|
* @param chatIcon
|
|
*/
|
|
public void setChatIcon(int chatIcon) {
|
|
this.chatIcon = chatIcon;
|
|
}
|
|
|
|
/**
|
|
* Gets the uid.
|
|
* @return the uid.
|
|
*/
|
|
public UIDInfo getUid() {
|
|
return uid;
|
|
}
|
|
|
|
/**
|
|
* Sets the uid.
|
|
* @param uid the uid to set
|
|
*/
|
|
public void setUid(UIDInfo uid) {
|
|
this.uid = uid;
|
|
}
|
|
|
|
/**
|
|
* Sets the disconnect time.
|
|
* @param time the time.
|
|
*/
|
|
public void setDisconnectTime(long time) {
|
|
this.disconnectionTime = time;
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object o) {
|
|
return username.equals(((PlayerSession) o).username);
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return "player [name=" + username + ", pass=" + password + ", ip=" + uid.getIp() + ", mac=" + uid.getMac() + ", comp=" + uid.getCompName() + ", msk=" + uid.getSerial() + "]";
|
|
}
|
|
|
|
} |