// ========================== MESSAGE HANDLERS - USER ============================

        // -------------------------------------------------------------------------------
        // OnUserLoginRequestMessage
        // @Client -> @Server
        // -------------------------------------------------------------------------------
        void OnUserLoginRequestMessage(NetworkConnection conn, UserLoginRequestMessage msg)
        {
            ServerPlayerListMessage message = new ServerPlayerListMessage
            {
                code             = successCode,
                text             = "",
                causesDisconnect = false
            };

            if (DatabaseManager.singleton.TryUserLogin(msg.username, msg.password))
            {
                NetworkManager.singleton.LoginUser(conn, msg.username);

                /*
                 * TODO:
                 * message.players
                 * message.maxPlayer
                 */

                eventListener.onUserLogin.Invoke(conn);
                message.text = systemText.userLoginSuccess;
            }
            else
            {
                message.text = systemText.userLoginFailure;
                message.code = errorCode;
            }

            conn.Send(message);
        }
        // ======================= PUBLIC METHODS - USER =================================

        // -------------------------------------------------------------------------------
        // RequestLoginUser
        // -------------------------------------------------------------------------------
        public override bool RequestLoginUser(NetworkConnection conn, string name, string password)
        {
            if (!base.RequestLoginUser(conn, name, password))
            {
                return(false);
            }

            UserLoginRequestMessage message = new UserLoginRequestMessage
            {
                username = name,
                password = GenerateHash(name, password)
            };

            conn.Send(message);

            return(true);
        }