Advertisement
Guest User

Untitled

a guest
Oct 19th, 2017
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.26 KB | None | 0 0
  1. function HydrogenLogs.InitDB()
  2. HydrogenLogs.dbinfo = ""
  3. HydrogenLogs.ValidDatabase = true
  4.  
  5. if (file.Exists("hlogs/database.txt", "DATA")) then
  6. HydrogenLogs.dbinfo = util.JSONToTable(file.Read("hlogs/database.txt"))
  7. else
  8. HydrogenLogs.dbinfo = {"http://kratos-gaming.net", "root", "ckhomie1", "hlogs", 3306, "mysqloo"}
  9. HydrogenLogs.ValidDatabase = false
  10. end
  11.  
  12. local dbinfo = HydrogenLogs.dbinfo
  13.  
  14. local dbhandler = dbinfo[6]
  15.  
  16. if (dbhandler == 'tmysql') then dbhandler = 'tmysql4' end
  17.  
  18. local dbhost = dbinfo[1]
  19. local dbuser = dbinfo[2]
  20. local dbpass = dbinfo[3]
  21. local dbname = dbinfo[4]
  22. local dbport = tonumber(dbinfo[5])
  23.  
  24. if (dbhandler == 'mysqloo') then
  25. -- Connect to the database using MySQLoo
  26. require('mysqloo')
  27.  
  28. HydrogenLogs.Database = mysqloo.connect( dbhost, dbuser, dbpass, dbname, dbport)
  29. HydrogenLogs.Database:connect();
  30.  
  31. local database = HydrogenLogs.Database;
  32.  
  33. function database:onConnected()
  34. if (HydrogenLogs.ValidDatabase) then
  35. MsgC(Color(0, 250, 20), "Hydrogen Logs: connected to the database successfully, using MySQLoo \n");
  36. else
  37. MsgC(Color(225, 220, 20), "Hydrogen Logs - Loaded. Type 'hlogs.setroot <playername>' to change the\nroot user, and continue with database setup\n");
  38. end
  39.  
  40. hook.Call("Hydrogen.Database.Connected", GAMEMODE, dbhandler);
  41. HydrogenLogs.Database.ConnectedOnStart = true
  42.  
  43. end
  44.  
  45. function database:onConnectionFailed(err)
  46. if (HydrogenLogs.ValidDatabase) then
  47. MsgC(Color(250, 10, 10), "Hydrogen Logs was unable to connect to the database: \n")
  48. MsgC(Color(250, 15, 15), "MySQL Error: ", err .. "\n")
  49. end
  50. hook.Call("Hydrogen.Database.ConnectionFailed", GAMEMODE, dbhandler, err);
  51. HydrogenLogs.Database.ConnectedOnStart = false
  52. end
  53.  
  54. elseif (dbhandler == 'tmysql4') then
  55. -- Connect to the database using tMySQL
  56. require('tmysql')
  57.  
  58. HydrogenLogs.Database, HydrogenLogs.DatabaseError = tmysql.initialize(dbhost, dbuser, dbpass, dbname, dbport, "", 0)
  59.  
  60. if (HydrogenLogs.DatabaseError ~= nil) then
  61. if (HydrogenLogs.ValidDatabase) then
  62. MsgC(Color(250, 10, 10), "Hydrogen Logs was unable to connect to the database: \n")
  63. MsgC(Color(250, 15, 15), "Error: ", HydrogenLogs.DatabaseError .. "\n")
  64. end
  65. hook.Call("Hydrogen.Database.ConnectionFailed", dbhandler, err);
  66. HydrogenLogs.Database.ConnectedOnStart = false
  67. else
  68.  
  69. if (HydrogenLogs.ValidDatabase) then
  70. MsgC(Color(0, 250, 20), "Hydrogen Logs has connected to the database successfully, using tMySQL4 \n");
  71. else
  72. MsgC(Color(225, 220, 20), "Hydrogen Logs - Loaded. Type 'hlogs.setroot <playername>' to change the\nroot user, and continue with database setup\n");
  73. end
  74.  
  75. timer.Simple(5, function()
  76. HydrogenLogs.Database.ConnectedOnStart = true
  77. hook.Call("Hydrogen.Database.Connected", GAMEMODE, dbhandler);
  78. end)
  79. end
  80. else
  81. -- Don't connect to the database, because idk how to do that with the specified module
  82. MsgC(Color(250, 10, 10), "Hydrogen Logs cannot connect to your database, unrecognized module.")
  83. end
  84.  
  85. function HydrogenLogs.Database.RealEscape(str)
  86. local dbhandler = HydrogenLogs.dbinfo[6]
  87.  
  88. if (dbhandler == "mysqloo") then
  89. return HydrogenLogs.Database:escape(str)
  90. elseif (dbhandler == "tmysql4") then
  91. return HydrogenLogs.Database:Escape(str)
  92. end
  93. end
  94.  
  95. function HydrogenLogs.Database.Insert(table, columns, data, callback)
  96. assert(type(columns) == 'table', 'HydrogenLogs.Database.Insert expected table as second argument')
  97. assert(type(data) == 'table', 'HydrogenLogs.Database.Insert expected table as third argument')
  98.  
  99. local safedata = {};
  100.  
  101. for key, value in pairs(data) do
  102. safedata[key] = HydrogenLogs.Database.RealEscape(tostring(value));
  103. end
  104.  
  105. -- 'safedata' now contains all escaped strings
  106. local parsed_columns = #columns > 1 and string.Implode(",", columns) or string.Implode("", columns);
  107. local safedata = #safedata > 1 and "'"..string.Implode("','", safedata).."'" or "'"..string.Implode("'", safedata).."'"; -- Make sure the data is in quotes
  108.  
  109. assert(#columns == #data, "Hydrogen: Row count does not match value count in query\n")
  110. local db = HydrogenLogs.Database
  111. local sql = "INSERT INTO `".. table .."` (".. parsed_columns ..") VALUES (".. safedata ..")"
  112.  
  113. if (HydrogenLogs.dbinfo[6] == 'mysqloo') then
  114.  
  115. -------- MySQLoo v9 better support
  116. if (mysqloo.VERSION == "9") then -- Use a prepared query
  117. local emptyData = ""
  118.  
  119. for k, v in pairs(columns) do
  120. local max = #columns
  121.  
  122. if (k == max) then
  123. emptyData = emptyData.."?"
  124. else
  125. emptyData = emptyData.."?, "
  126. end
  127. end
  128.  
  129. local preparedLogQuery = db:prepare("INSERT INTO `".. table .."` (".. parsed_columns ..") VALUES (".. emptyData ..")")
  130.  
  131. for key, info in pairs(data) do
  132. preparedLogQuery:setString(key, tostring(info))
  133. end
  134.  
  135. preparedLogQuery:start()
  136.  
  137. function preparedLogQuery:onSuccess(data)
  138. if (type(callback) == "function") then callback(data) end
  139. end
  140.  
  141. function preparedLogQuery:onError(err)
  142. if (HydrogenLogs.Config['Debug']) then print("[LOG DEBUGGER] - MySQL: "..err) end
  143.  
  144. if (err == "MySQL server has gone away") then
  145. db.onConnected = function()
  146. print("Hydrogen logs reconnected to the database after timeout")
  147. end
  148.  
  149. db.onConnectionFailed = function(db, e)
  150. 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)
  151. 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")
  152. end
  153.  
  154. db:connect();
  155. end
  156. end
  157.  
  158. return
  159. end
  160. -- End MySQLoo v9 query
  161.  
  162. local logQuery = HydrogenLogs.Database:query(sql);
  163.  
  164. function logQuery:onSuccess(data)
  165. if (type(callback) == "function") then callback(data) end
  166. end
  167.  
  168. function logQuery:onError(err)
  169. if (HydrogenLogs.Config['Debug']) then print("[LOG DEBUGGER] - MySQL: "..err) end
  170.  
  171. if (err == "MySQL server has gone away") then
  172. db.onConnected = function()
  173. print("Hydrogen logs reconnected to the database after timeout")
  174. end
  175.  
  176. db.onConnectionFailed = function(db, e)
  177. 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)
  178. 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")
  179. end
  180.  
  181. db:connect();
  182. end
  183. end
  184.  
  185.  
  186. logQuery:start();
  187. elseif (HydrogenLogs.dbinfo[6] == 'tmysql4') then
  188. db:Query("INSERT INTO `".. table .."` (".. parsed_columns ..") VALUES (".. safedata ..")")
  189. end -- If
  190. end
  191.  
  192. function HydrogenLogs.Database.RemoveAdmin(steamid64)
  193. local steamid = HydrogenLogs.Database.RealEscape(tostring(steamid64))
  194. local sql = "DELETE FROM `admins` WHERE `steamid` = '".. steamid .."'"
  195.  
  196. if (HydrogenLogs.dbinfo[6] == "mysqloo") then
  197. local removeAdminQuery = HydrogenLogs.Database:query(sql);
  198.  
  199. function removeAdminQuery:onSuccess(data)
  200. if (type(callback) == "function") then callback(data) end
  201. end
  202.  
  203. function removeAdminQuery:onError(err)
  204. if (err == "MySQL server has gone away") then
  205. db.onConnected = function()
  206. local removeAdminQuery = HydrogenLogs.Database:query(sql);
  207. removeAdminQuery:start()
  208. print("Hydrogen logs reconnected to the database after timeout")
  209. end
  210.  
  211. db.onConnectionFailed = function(db, e)
  212. 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)
  213. 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")
  214. end
  215.  
  216. db:connect();
  217. end
  218. end
  219.  
  220. removeAdminQuery:start();
  221. elseif (HydrogenLogs.dbinfo[6] == "tmysql4") then
  222. db:Query("DELETE FROM `admins` WHERE `steamid` = '".. steamid .."'");
  223. end
  224.  
  225. end
  226.  
  227. end
  228.  
  229. HydrogenLogs.InitDB();
  230.  
  231. concommand.Add("hlogs.reconnect", function()
  232. HydrogenLogs.InitDB()
  233. end)
  234.  
  235. concommand.Add("hlogs.dbstate", function()
  236. print(HydrogenLogs.Database:status())
  237. end)
  238.  
  239. timer.Create("HydrogenCheckDBConnection", 360, 0, function()
  240. if (HydrogenLogs.dbinfo[6] == 'mysqloo') then
  241. if (HydrogenLogs.Database:status() == mysqloo.DATABASE_NOT_CONNECTED) then
  242. HydrogenLogs.InitDB()
  243. end
  244. end
  245. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement