Added initial version

This commit is contained in:
Ceikry
2021-03-07 20:37:32 -06:00
commit b452bd670c
13290 changed files with 1178433 additions and 0 deletions
@@ -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() + "]";
}
}