dbConnector y UserData.

Se ha creado y serializado el archivo de datos de conexión a BD.
Se ha terminado de serializar el archivo de datos de usuario.
Se han creado métodos para operar con estos datos.
Varias correcciones y comentarios por ahí.
This commit is contained in:
2022-06-09 19:42:30 +02:00
parent f79d0b6728
commit 4aa05dc211
10 changed files with 191 additions and 25 deletions
+5
View File
@@ -113,3 +113,8 @@ Thumbs.db
/ios/xcode/native/
/ios/IOSLauncher.app
/ios/IOSLauncher.app.dSYM
## Datos de guardado del juego.
/saves/
/gameData/
+1 -1
View File
@@ -1,4 +1,4 @@
[
[datosString
{
"class": "uberelectron.gameSystems.Machine",
"machineID": "base_raspi_mk1",
@@ -15,8 +15,8 @@ public class GameManager
{
private static GameManager instance;
private final String localSavePath = "save/";
private final String localRoomSavePath = "save/Rooms/";
private final String localSavePath = "saves/";
private final String localRoomSavePath = "saves/Rooms/";
private final String internalDataPath = "data/";
private final String internalRoomDataPath = "data/";
@@ -3,8 +3,8 @@ package uberelectron.gameSystems;
/**
* Contiene los datos de inicio de sesión del usuario.
* Esta clase se serializa automáticamente a JSON en LoginSystem.
* @author Daniel García
*
* @author Daniel García
* @see LoginSystem
*/
public class LoginData
@@ -1,5 +1,17 @@
package uberelectron.gameSystems;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Json;
import com.badlogic.gdx.utils.JsonWriter;
/**
* Clase que realiza el inicio de sesión y autenticación del usuario.
* Toma los datos desde el archivo JSON y los verifica con la DB.
* También crea nuevos usuarios y permite saber si el usuario está autentificado.
*
* @author Daniel García.
*/
public class LoginSystem
{
private LoginSystem() {}
@@ -27,26 +39,91 @@ public class LoginSystem
return datosUsuario.nickname;
}
public static void CrearNuevoUsuario()
/**
* Comprueba en la BD si ese nick ya está ocupado.
* @param username Nombre de usuario a comprobar.
* @return True si el nick está disponible, False si está ocupado.
*/
public static boolean ComprobarNickDisponible(String username)
{
//TODO: dbConector.comprobarNick.
return true;
}
/**
* Crea un nuevo usuario, lo guarda en un JSON y lo añade a la BD.
* @param username Nombre de usuario.
* @param password Contraseña.
*/
public static void CrearNuevoUsuario(String username, String password)
{
//Creará un nuevo LoginData:
// Lo guardará como JSON.
// Añadirá el usuario a la DB -> AddUserToDB
}
private void LoadFromJSON()
//Comprobamos si el nick está disponible. Si no lo está, cancelamos.
if(!ComprobarNickDisponible(username))
{
//Carga el JSON desde la ubicación por defecto.
Gdx.app.log("LoginSystem", "El nombre " + username + " no está disponible.");
return;
}
private void SaveToJSON()
//Creamos el usuario.
//FIXME: No es demasiado bonito...
datosUsuario = new LoginData();
datosUsuario.nickname = username;
datosUsuario.password = password;
//Lo guardamos al JSON.
SaveToJSON();
//Lo añadimos a la DB.
AddUserToDB();
}
/**
* Carga los datos de usuario desde un JSON de la ubicación por defecto.
*/
private static void LoadFromJSON()
{
//Guarda el JSON en la ubicación por defecto.
//Comprobamos si el archivo existe.
FileHandle file = Gdx.files.local(localDefaultSavePath + defaultFileName);
if(!file.exists())
{
Gdx.app.error("LoginSystem", "No se puede cargar el archivo de datos de usuario. " +
"El Archivo no existe");
return;
}
private void AddUserToDB()
//Cargamos desde archivo.
Json json = new Json();
datosUsuario = json.fromJson(LoginData.class, file);
}
/**
* Guarda los datos de usuario a un JSON en la ubicación por defecto.
*/
private static void SaveToJSON()
{
//Creamos el JSON y lo generamos.
Json json = new Json(JsonWriter.OutputType.json);
String datos = json.toJson(datosUsuario);
//Abrimos el archivo y lo escribimos.
FileHandle file = Gdx.files.local(localDefaultSavePath + defaultFileName);
file.writeString(json.prettyPrint(datos), false);
}
/**
* Añade un usuario a la BD a partir de los datos de usuario.
*
* @see dbConnector
*/
private static void AddUserToDB()
{
//Inserta directamente a la DB.
//TODO: dbConector.adduser;
}
@@ -12,8 +12,6 @@ import java.util.Map;
/*
ToDo:
- Cuestiones de "Privacidad" de variables.
- Revisar que los Ptrs son Ptrs.
- Comprobar que los archivos (los paths) existen.
*/
@@ -46,7 +44,7 @@ public class RoomLoader
mcLoader = MachineLoader.getInstance();
loaderJson = new Json();
loaderJson.setOutputType(JsonWriter.OutputType.json);
loaderJson.setSerializer(Room.class, roomSerializer);
}
@@ -90,6 +88,7 @@ public class RoomLoader
String data = loaderJson.toJson(rSave);
//FileHandle file = Gdx.files.local(path);
file.writeString(loaderJson.prettyPrint(data), false);
Gdx.app.log("RoomLoader", "Se ha guardado la room " + roomID + " en " + file);
}
@@ -155,13 +154,18 @@ public class RoomLoader
return currentRoom;
}
/**
* Devuelve la Room con el RoomID indicado.
* @param roomID ID de la Room que se quiere.
* @return La room solicitada.
*/
public Room GetRoomByID(String roomID)
{
return loadedRooms.get(roomID);
}
//DEBUG: Para hacer pruebas desde BackEndTest.java.
//FIXME DEBUG: Para hacer pruebas desde BackEndTest.java.
public void AddRoom(Room rToAdd)
{
loadedRooms.put(rToAdd.roomName, rToAdd);
@@ -5,6 +5,13 @@ import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Json;
import com.badlogic.gdx.utils.JsonWriter;
/**
* Clase estática para la carga/guardado de datos de partida.
* Estos datos incluyen el dinero y las salas compradas, entre otros.
* Puede cargar/guardar desde JSON y desde DB.
*
* @author Daniel García.
*/
public class SaveLoader
{
private SaveLoader() {}
@@ -1,29 +1,53 @@
package uberelectron.gameSystems;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Json;
import com.badlogic.gdx.utils.JsonWriter;
import com.mysql.jdbc.Driver;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
/**
* Clase estática que realiza todas las interacciones con la BD.
* Carga los datos de conexión desde un archivo JSON.
*
* @author Daniel García.
*/
public class dbConnector
{
private static Connection connect;
private static dbData datosConexion;
private static Connection connect = null;
private static dbData datosConexion = null;
private static final String localDefaultSavePath = "gameData/";
private static final String defaultFileName = "dbData.json";
private static final String mensajeErrorGenerico = "No se ha podido interactuar con la BD.";
/**
* Inicializa la conexión con la BD.
* Utiliza los datos de conexión del fichero JSON.
*/
public static void InitDbConnection()
{
//Cargamos los datos de Acceso desde el JSON.
LoadConnectionDataFromJSON();
//Comprobamos que están cargados los datos de acceso.
if(datosConexion == null)
{
Gdx.app.error("dbConnector", "No se ha podido establecer conexión con la DB. " +
"No hay datos de conexión.");
return;
}
//Realizamos la conexión.
try
{
Class.forName("com.mysql.cj.jdbc.Driver");
//Todo: Cargar datos de acceso desde dbData.
String url = "jdbc:mysql://" + datosConexion.hostname
+ ":" + datosConexion.port
+ "/" + datosConexion.dbName;
@@ -40,7 +64,7 @@ public class dbConnector
}
catch (Exception e)
{
System.err.println("No ha sido posible comunicarse con la BD.");
Gdx.app.error("dbConnector", "No ha sido posible comunicarse con la BD.");
return;
}
@@ -48,13 +72,55 @@ public class dbConnector
}
catch (Exception e)
{
System.err.println("No se ha podido cargar el Driver de MySQL.");
Gdx.app.error("dbConnector", "No se ha podido cargar el Driver de MySQL.");
}
}
/**
* Carga los datos desde el archivo JSON.
* Utiliza la ubicación por defecto definida en las variables de clase.
*/
private static void LoadConnectionDataFromJSON()
{
//Obtenemos el archivo.
FileHandle file = Gdx.files.local(localDefaultSavePath + defaultFileName);
if(!file.exists())
{
Gdx.app.error("dbConnector", "El archivo de datos de conexión no está disponible.");
return;
}
//Cargamos los datos desde el JSON.
Json json = new Json();
datosConexion = json.fromJson(dbData.class, file);
}
private static void LoadConnectionDataFromJSON()
/*
FIXME: DEBUG
Genera un archivo JSON con los datos indicados.
*/
public static void SaveConnectionDataToJSON()
{
dbData data = new dbData();
data.hostname = "192.168.5.1";
data.port = "3306";
data.user = "root";
data.password = "password";
data.dbName = "pepeDB";
Json json = new Json(JsonWriter.OutputType.json);
String datosString = json.toJson(data);
FileHandle file = Gdx.files.local(localDefaultSavePath + defaultFileName);
file.writeString(json.prettyPrint(datosString), false);
}
//TODO: ¿Qué necesito? Creo que el ID de partida...
// ¿Dónde lo guardo?
public static void SaveRoomToDB()
{
}
@@ -4,6 +4,8 @@ package uberelectron.gameSystems;
/**
* Contiene los datos necesarios para la conexión con la BD.
* Esta clase se serializa automáticamente a JSON en DBConnector.
*
* @author Daniel García.
*/
public class dbData
{
@@ -4,10 +4,7 @@ import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Json;
import uberelectron.gameSystems.Machine;
import uberelectron.gameSystems.MachineLoader;
import uberelectron.gameSystems.Room;
import uberelectron.gameSystems.RoomLoader;
import uberelectron.gameSystems.*;
import java.io.Reader;
import java.util.logging.FileHandler;
@@ -85,6 +82,14 @@ public class BackEndTest implements Screen
// Gdx.app.log("Test", "Mensaje del LOG");
// Gdx.app.error("Test", "Mensaje de ERROR");
// Gdx.app.debug("Test", "Mensaje de Debug");
/*
Pruebas con DB
*/
dbConnector.SaveConnectionDataToJSON();
Gdx.app.log("BackEndTest", "Prueba completada.");
}