Added initial version
This commit is contained in:
@@ -0,0 +1,470 @@
|
||||
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() + "]";
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user