Mercurial > maze-src
view database.rb @ 0:1eef88068f9f tip
initial commit of maze game source
| author | ferencd |
|---|---|
| date | Sun, 15 Sep 2019 11:46:47 +0200 |
| parents | |
| children |
line wrap: on
line source
require 'utils' require 'gs_logger' # # This class is responsible for handling all database related requests # class Database private_class_method :new def Database.initialize @@conn = PG::Connection.new(:dbname => 'mazedb', :user => 'mazedb', :password => 's321851gper') @@conn.prepare('ins_prep_stmt', 'insert into games (level_id, level_number,level_type) values ($1,$2,$3)') @@conn.prepare('sel_for_game_id_prep_stmt', 'select * from games where level_id=$1') @@conn.prepare('sel_level_no_prep_stmt', 'select level_number from games where level_id=$1') @@conn.prepare('upd_prep_stmt', 'update games set level_number=$1 where level_id=$2') $LOG.info 'Database initialized' rescue => ex $LOG.fatal "Exception caught while preparing the statements: #{ex.class.to_s}\n" exit 1 end # # Inserts a game ID into the database # def Database.insert_game_id_to_db(game_id, lev_no, gam_type) @@conn.exec_prepared 'ins_prep_stmt', ["#{game_id}", lev_no, gam_type] rescue => ex $LOG.error "Exception caught: #{ex.class.to_s}\n" raise end # # Creates a valid game ID by assuring no duplicates in the database # def Database.create_valid_game_id (game_type) game_id = game_type + Utils.random_string(8) # Create a unique ID for the current level loop do begin res = @@conn.exec_prepared 'sel_for_game_id_prep_stmt', ["#{game_id}"] rescue => ex $LOG.error "Exception caught: #{ex.class.to_s}\n" raise end break if res.cmd_tuples == 0 res.clear game_id = 'S' + Utils.random_string(8) end game_id end # # Returns the level to which this gid is associated # def Database.get_db_level_for_gid(gid) level_no = 1 loop do begin res = @@conn.exec_prepared 'sel_level_no_prep_stmt', ["#{gid}"] rescue => ex $LOG.error "Exception caught: #{ex.class.to_s}\n" raise end return -1 if res.cmd_tuples == 0 level_no = res[0] res.clear break end level_no['level_number'].to_i end # # Updates the level number for the given game ID to reflect th current state # def Database.update_level_number_for_gid(level_number, gid) loop do begin res = @@conn.exec_prepared 'upd_prep_stmt', [level_number, "#{gid}"] rescue => ex $LOG.error "Exception caught: #{ex.class.to_s}\n" raise end break if res.cmd_tuples == 0 res.clear break end end end
