Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function HydrogenLogs.InitDB()
- HydrogenLogs.dbinfo = ""
- HydrogenLogs.ValidDatabase = true
- if (file.Exists("hlogs/database.txt", "DATA")) then
- HydrogenLogs.dbinfo = util.JSONToTable(file.Read("hlogs/database.txt"))
- else
- HydrogenLogs.dbinfo = {"http://kratos-gaming.net", "root", "ckhomie1", "hlogs", 3306, "mysqloo"}
- HydrogenLogs.ValidDatabase = false
- end
- local dbinfo = HydrogenLogs.dbinfo
- local dbhandler = dbinfo[6]
- if (dbhandler == 'tmysql') then dbhandler = 'tmysql4' end
- local dbhost = dbinfo[1]
- local dbuser = dbinfo[2]
- local dbpass = dbinfo[3]
- local dbname = dbinfo[4]
- local dbport = tonumber(dbinfo[5])
- if (dbhandler == 'mysqloo') then
- -- Connect to the database using MySQLoo
- require('mysqloo')
- HydrogenLogs.Database = mysqloo.connect( dbhost, dbuser, dbpass, dbname, dbport)
- HydrogenLogs.Database:connect();
- local database = HydrogenLogs.Database;
- function database:onConnected()
- if (HydrogenLogs.ValidDatabase) then
- MsgC(Color(0, 250, 20), "Hydrogen Logs: connected to the database successfully, using MySQLoo \n");
- else
- MsgC(Color(225, 220, 20), "Hydrogen Logs - Loaded. Type 'hlogs.setroot <playername>' to change the\nroot user, and continue with database setup\n");
- end
- hook.Call("Hydrogen.Database.Connected", GAMEMODE, dbhandler);
- HydrogenLogs.Database.ConnectedOnStart = true
- end
- function database:onConnectionFailed(err)
- if (HydrogenLogs.ValidDatabase) then
- MsgC(Color(250, 10, 10), "Hydrogen Logs was unable to connect to the database: \n")
- MsgC(Color(250, 15, 15), "MySQL Error: ", err .. "\n")
- end
- hook.Call("Hydrogen.Database.ConnectionFailed", GAMEMODE, dbhandler, err);
- HydrogenLogs.Database.ConnectedOnStart = false
- end
- elseif (dbhandler == 'tmysql4') then
- -- Connect to the database using tMySQL
- require('tmysql')
- HydrogenLogs.Database, HydrogenLogs.DatabaseError = tmysql.initialize(dbhost, dbuser, dbpass, dbname, dbport, "", 0)
- if (HydrogenLogs.DatabaseError ~= nil) then
- if (HydrogenLogs.ValidDatabase) then
- MsgC(Color(250, 10, 10), "Hydrogen Logs was unable to connect to the database: \n")
- MsgC(Color(250, 15, 15), "Error: ", HydrogenLogs.DatabaseError .. "\n")
- end
- hook.Call("Hydrogen.Database.ConnectionFailed", dbhandler, err);
- HydrogenLogs.Database.ConnectedOnStart = false
- else
- if (HydrogenLogs.ValidDatabase) then
- MsgC(Color(0, 250, 20), "Hydrogen Logs has connected to the database successfully, using tMySQL4 \n");
- else
- MsgC(Color(225, 220, 20), "Hydrogen Logs - Loaded. Type 'hlogs.setroot <playername>' to change the\nroot user, and continue with database setup\n");
- end
- timer.Simple(5, function()
- HydrogenLogs.Database.ConnectedOnStart = true
- hook.Call("Hydrogen.Database.Connected", GAMEMODE, dbhandler);
- end)
- end
- else
- -- Don't connect to the database, because idk how to do that with the specified module
- MsgC(Color(250, 10, 10), "Hydrogen Logs cannot connect to your database, unrecognized module.")
- end
- function HydrogenLogs.Database.RealEscape(str)
- local dbhandler = HydrogenLogs.dbinfo[6]
- if (dbhandler == "mysqloo") then
- return HydrogenLogs.Database:escape(str)
- elseif (dbhandler == "tmysql4") then
- return HydrogenLogs.Database:Escape(str)
- end
- end
- function HydrogenLogs.Database.Insert(table, columns, data, callback)
- assert(type(columns) == 'table', 'HydrogenLogs.Database.Insert expected table as second argument')
- assert(type(data) == 'table', 'HydrogenLogs.Database.Insert expected table as third argument')
- local safedata = {};
- for key, value in pairs(data) do
- safedata[key] = HydrogenLogs.Database.RealEscape(tostring(value));
- end
- -- 'safedata' now contains all escaped strings
- local parsed_columns = #columns > 1 and string.Implode(",", columns) or string.Implode("", columns);
- local safedata = #safedata > 1 and "'"..string.Implode("','", safedata).."'" or "'"..string.Implode("'", safedata).."'"; -- Make sure the data is in quotes
- assert(#columns == #data, "Hydrogen: Row count does not match value count in query\n")
- local db = HydrogenLogs.Database
- local sql = "INSERT INTO `".. table .."` (".. parsed_columns ..") VALUES (".. safedata ..")"
- if (HydrogenLogs.dbinfo[6] == 'mysqloo') then
- -------- MySQLoo v9 better support
- if (mysqloo.VERSION == "9") then -- Use a prepared query
- local emptyData = ""
- for k, v in pairs(columns) do
- local max = #columns
- if (k == max) then
- emptyData = emptyData.."?"
- else
- emptyData = emptyData.."?, "
- end
- end
- local preparedLogQuery = db:prepare("INSERT INTO `".. table .."` (".. parsed_columns ..") VALUES (".. emptyData ..")")
- for key, info in pairs(data) do
- preparedLogQuery:setString(key, tostring(info))
- end
- preparedLogQuery:start()
- function preparedLogQuery:onSuccess(data)
- if (type(callback) == "function") then callback(data) end
- end
- function preparedLogQuery:onError(err)
- if (HydrogenLogs.Config['Debug']) then print("[LOG DEBUGGER] - MySQL: "..err) end
- if (err == "MySQL server has gone away") then
- db.onConnected = function()
- print("Hydrogen logs reconnected to the database after timeout")
- end
- db.onConnectionFailed = function(db, e)
- MsgC(Color(230, 22, 22), "Hydrogen logs couldn't regain database connection, server offline. \nRun 'hlogs.reconnect' in the server console to attempt a database reconnection\n", e)
- file.Write("hydrogen_logs.txt", "Hydrogen logs couldn't regain database connection, server offline. \n Run 'hlogs.reconnect' in the server console to attempt a database reconnection")
- end
- db:connect();
- end
- end
- return
- end
- -- End MySQLoo v9 query
- local logQuery = HydrogenLogs.Database:query(sql);
- function logQuery:onSuccess(data)
- if (type(callback) == "function") then callback(data) end
- end
- function logQuery:onError(err)
- if (HydrogenLogs.Config['Debug']) then print("[LOG DEBUGGER] - MySQL: "..err) end
- if (err == "MySQL server has gone away") then
- db.onConnected = function()
- print("Hydrogen logs reconnected to the database after timeout")
- end
- db.onConnectionFailed = function(db, e)
- MsgC(Color(230, 22, 22), "Hydrogen logs couldn't regain database connection, server offline. \nRun 'hlogs.reconnect' in the server console to attempt a database reconnection\n", e)
- file.Write("hydrogen_logs.txt", "Hydrogen logs couldn't regain database connection, server offline. \n Run 'hlogs.reconnect' in the server console to attempt a database reconnection")
- end
- db:connect();
- end
- end
- logQuery:start();
- elseif (HydrogenLogs.dbinfo[6] == 'tmysql4') then
- db:Query("INSERT INTO `".. table .."` (".. parsed_columns ..") VALUES (".. safedata ..")")
- end -- If
- end
- function HydrogenLogs.Database.RemoveAdmin(steamid64)
- local steamid = HydrogenLogs.Database.RealEscape(tostring(steamid64))
- local sql = "DELETE FROM `admins` WHERE `steamid` = '".. steamid .."'"
- if (HydrogenLogs.dbinfo[6] == "mysqloo") then
- local removeAdminQuery = HydrogenLogs.Database:query(sql);
- function removeAdminQuery:onSuccess(data)
- if (type(callback) == "function") then callback(data) end
- end
- function removeAdminQuery:onError(err)
- if (err == "MySQL server has gone away") then
- db.onConnected = function()
- local removeAdminQuery = HydrogenLogs.Database:query(sql);
- removeAdminQuery:start()
- print("Hydrogen logs reconnected to the database after timeout")
- end
- db.onConnectionFailed = function(db, e)
- MsgC(Color(230, 22, 22), "Hydrogen logs couldn't regain database connection, server offline. \nRun 'hlogs.reconnect' in the server console to attempt a database reconnection\n", e)
- file.Write("hydrogen_logs.txt", "Hydrogen logs couldn't regain database connection, server offline. \n Run 'hlogs.reconnect' in the server console to attempt a database reconnection")
- end
- db:connect();
- end
- end
- removeAdminQuery:start();
- elseif (HydrogenLogs.dbinfo[6] == "tmysql4") then
- db:Query("DELETE FROM `admins` WHERE `steamid` = '".. steamid .."'");
- end
- end
- end
- HydrogenLogs.InitDB();
- concommand.Add("hlogs.reconnect", function()
- HydrogenLogs.InitDB()
- end)
- concommand.Add("hlogs.dbstate", function()
- print(HydrogenLogs.Database:status())
- end)
- timer.Create("HydrogenCheckDBConnection", 360, 0, function()
- if (HydrogenLogs.dbinfo[6] == 'mysqloo') then
- if (HydrogenLogs.Database:status() == mysqloo.DATABASE_NOT_CONNECTED) then
- HydrogenLogs.InitDB()
- end
- end
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement