using UnityEngine; using MySql.Data.MySqlClient; using System.Collections.Generic; public class DataBaseConnection : MonoBehaviour { //Don't know why but this script must be in main folder :-( [SerializeField] string localHost; [SerializeField] string user; [SerializeField] string password; [SerializeField] string dateBaseName; MySqlConnection mySQLconnection; MySqlCommand mySQLcommand; MySqlDataReader mySQLreader; static DataBaseConnection dataBaseConnectionInstance; int currentLoginID; public int CurrentLoginID { get { return currentLoginID; } } private void Awake() { DontDestroyOnLoad(this); if (dataBaseConnectionInstance == null) { dataBaseConnectionInstance = this; Mediator.Instance.Subscribe(OnRegisterCmd); Mediator.Instance.Subscribe(OnLogInCmd); } else { DestroyObject(gameObject); } } public static List GetProfessionsName() { List professionList = new List(); if (Connect()) { string command = "select Nazwa from Profesja"; mySQLcommand = new MySqlCommand(command, mySQLconnection); mySQLreader = mySQLcommand.ExecuteReader(); while (mySQLreader.Read()) { professionList.Add(mySQLreader["Nazwa"].ToString()); //Debug.Log(mySQLreader["Nazwa"].ToString()); } mySQLreader.Close(); mySQLconnection.Close(); } else { Debug.Log("database connection is interrupt"); } return professionList; } void OnLogInCmd(LogInCmd cmd) { string login = cmd.Login; string password = cmd.Password; if (CheckExistingPlayer(login) == 1) { if (CheckPasswordCorrect(login, password) == 1) { int loginID = GetLoginID(login); if (loginID != -1) { ShowStatement("Loging, please wait!"); Logged(loginID); } else { Debug.Log("database interrupt"); } } else if (CheckPasswordCorrect(login, password) == 0) { ShowStatement("Password is incorrect!"); } else { Debug.Log("database interrupt"); } } else if (CheckExistingPlayer(login) == 0) { ShowStatement("Player doesn't exists!"); } else { Debug.Log("database interrupt"); ShowStatement("database is not connected"); } } void Logged(int loginID) { currentLoginID = loginID; var loggedCmd = new LoggedCmd(); loggedCmd.LoginID = loginID; Mediator.Instance.Publish(loggedCmd); } /// /// return -1 if database connection is interrupt /// /// /// int GetLoginID(string login) { if (Connect()) { string command = "SELECT ID from Uzytkownik where Login = '" + login + "'"; mySQLcommand = new MySqlCommand(command, mySQLconnection); int getLoginID = System.Convert.ToInt32(mySQLcommand.ExecuteScalar()); mySQLconnection.Close(); return getLoginID; } return -1; } /// /// return -1 if database connection is interrupt /// return 0 if password is incorrect /// return 1 if password is correct /// /// /// /// int CheckPasswordCorrect(string login, string password) { if (Connect()) { string command = "SELECT Haslo from Uzytkownik where Login = '" + login + "'"; mySQLcommand = new MySqlCommand(command, mySQLconnection); string getPassword = System.Convert.ToString(mySQLcommand.ExecuteScalar()); mySQLconnection.Close(); if (password == getPassword) { return 1; } else { return 0; } } return -1; } bool Connect() { mySQLconnection = new MySqlConnection("server=" + localHost + "; user=" + user + "; database=" + dateBaseName + ";"); try { mySQLconnection.Open(); } catch (System.Exception e) { //Debug.Log("Connection state is closed"); return false; } if (mySQLconnection.State == System.Data.ConnectionState.Open) { return true; } return false; //? } void AddAccount(string login, string password) { if (CheckExistingPlayer(login) == 0) { if (Connect()) { string command = "INSERT INTO `uzytkownik` (`Login`, `Haslo`) VALUES('" + login + "', '" + password + "');"; mySQLcommand = new MySqlCommand(command, mySQLconnection); mySQLcommand.ExecuteNonQuery(); Debug.Log("New user was adding"); ShowStatement("New user was adding"); mySQLconnection.Close(); } else { Debug.Log("database interrupt"); } } else if (CheckExistingPlayer(login) == 1) { Debug.Log("this user can't be added"); ShowStatement("this user already exsits"); } else { Debug.Log("database interrupt"); ShowStatement("database is not connected"); } } /// /// return -1 if database connection is interrupt /// return 0 if login doesn't exist /// return 1 if login exists /// /// /// int CheckExistingPlayer(string login) { if (Connect()) { string command = "SELECT Count(Login) from Uzytkownik where Login = '" + login + "'"; mySQLcommand = new MySqlCommand(command, mySQLconnection); int number = System.Convert.ToInt32(mySQLcommand.ExecuteScalar()); mySQLconnection.Close(); if (number == 0) { return 0; } else { return 1; } } else { return -1; } } void DeletePlayer() { // TODO } void UpdatePlayer() { // TODO } void OnRegisterCmd(RegisterCmd cmd) { AddAccount(cmd.Login, cmd.Password); } void ShowStatement(string statement) { var cmd = new ShowStatementCmd(); cmd.Statement = statement; Mediator.Instance.Publish(cmd); } [ContextMenu("CheckPasswordCorrectTEST()")] void CheckPasswordCorrectTEST() { if (CheckPasswordCorrect("Mac", "Mac") == 1) { Debug.Log("Password is correct"); } if (CheckPasswordCorrect("Mac", "Mac") == 0) { Debug.Log("Password is incorrect"); } if (CheckPasswordCorrect("Mac", "Kac") == 1) { Debug.Log("Password is correct"); } if (CheckPasswordCorrect("Mac", "Kac") == 0) { Debug.Log("Password is incorrect"); } } [ContextMenu("ShowPlayers()")] void ShowPlayers() { if (Connect()) { string command = "select * from Uzytkownik"; mySQLcommand = new MySqlCommand(command, mySQLconnection); mySQLreader = mySQLcommand.ExecuteReader(); while (mySQLreader.Read()) { Debug.Log(mySQLreader["ID"].ToString() + " " + mySQLreader["Login"].ToString()); } mySQLreader.Close(); mySQLconnection.Close(); } else { Debug.Log("database connection is interrupt"); } } [ContextMenu("AddRandomPlayerTest()")] void AddRandomPlayerTest() { string name = System.Guid.NewGuid().ToString(); name = name.Substring(0, 30); //if you want set varchar's length to 30 Debug.Log("try to add player - " + name); AddAccount(name, "haslo"); } [ContextMenu("AddTheSamePlayerTest()")] void AddTheSamePlayerTest() { string name = "Mac"; Debug.Log("try to add player - " + name); AddAccount(name, "haslo"); } }