Hyluss icon

mySQL + Unity

Hyluss | PRO | 01/05/18 03:50:54 PM UTC | 0 ⭐ | 564 👁️ | Never ⏰ | []
C# |

9.17 KB

|

None

|

0 👍

/

0 👎

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<RegisterCmd>(OnRegisterCmd);
            Mediator.Instance.Subscribe<LogInCmd>(OnLogInCmd);
        }
        else
        {
            DestroyObject(gameObject);
        }
    }
 
    public static List<string> GetProfessionsName()
    {
        List<string> professionList = new List<string>();
        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>(loggedCmd);
    }
 
    /// <summary>
    /// <para> return -1 if database connection is interrupt </para>
    /// </summary>
    /// <param name="login"></param>
    /// <returns></returns>
    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;
    }
 
    /// <summary>
    /// <para>return -1 if database connection is interrupt</para> 
    /// <para>return 0 if password is incorrect</para>
    /// <para>return 1 if password is correct</para>
    /// </summary>
    /// <param name="login"></param>
    /// <param name="password"></param>
    /// <returns></returns>
    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");
        }       
    }
 
    /// <summary>
    /// <para> return -1 if database connection is interrupt </para>
    /// <para> return 0 if login doesn't exist </para>
    /// <para> return 1 if login exists </para>
    /// </summary>
    /// <param name="login"></param>
    /// <returns></returns>
    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<ShowStatementCmd>(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");
    }
 
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎