annotate database.rb @ 0:1eef88068f9f tip

initial commit of maze game source
author ferencd
date Sun, 15 Sep 2019 11:46:47 +0200
parents
children
rev   line source
ferencd@0 1 require 'utils'
ferencd@0 2 require 'gs_logger'
ferencd@0 3
ferencd@0 4 #
ferencd@0 5 # This class is responsible for handling all database related requests
ferencd@0 6 #
ferencd@0 7
ferencd@0 8 class Database
ferencd@0 9
ferencd@0 10 private_class_method :new
ferencd@0 11
ferencd@0 12 def Database.initialize
ferencd@0 13
ferencd@0 14 @@conn = PG::Connection.new(:dbname => 'mazedb', :user => 'mazedb', :password => 's321851gper')
ferencd@0 15
ferencd@0 16 @@conn.prepare('ins_prep_stmt', 'insert into games (level_id, level_number,level_type) values ($1,$2,$3)')
ferencd@0 17 @@conn.prepare('sel_for_game_id_prep_stmt', 'select * from games where level_id=$1')
ferencd@0 18 @@conn.prepare('sel_level_no_prep_stmt', 'select level_number from games where level_id=$1')
ferencd@0 19 @@conn.prepare('upd_prep_stmt', 'update games set level_number=$1 where level_id=$2')
ferencd@0 20
ferencd@0 21 $LOG.info 'Database initialized'
ferencd@0 22 rescue => ex
ferencd@0 23 $LOG.fatal "Exception caught while preparing the statements: #{ex.class.to_s}\n"
ferencd@0 24 exit 1
ferencd@0 25 end
ferencd@0 26
ferencd@0 27 #
ferencd@0 28 # Inserts a game ID into the database
ferencd@0 29 #
ferencd@0 30 def Database.insert_game_id_to_db(game_id, lev_no, gam_type)
ferencd@0 31 @@conn.exec_prepared 'ins_prep_stmt', ["#{game_id}", lev_no, gam_type]
ferencd@0 32 rescue => ex
ferencd@0 33 $LOG.error "Exception caught: #{ex.class.to_s}\n"
ferencd@0 34 raise
ferencd@0 35 end
ferencd@0 36
ferencd@0 37 #
ferencd@0 38 # Creates a valid game ID by assuring no duplicates in the database
ferencd@0 39 #
ferencd@0 40 def Database.create_valid_game_id (game_type)
ferencd@0 41 game_id = game_type + Utils.random_string(8)
ferencd@0 42 # Create a unique ID for the current level
ferencd@0 43 loop do
ferencd@0 44 begin
ferencd@0 45 res = @@conn.exec_prepared 'sel_for_game_id_prep_stmt', ["#{game_id}"]
ferencd@0 46 rescue => ex
ferencd@0 47 $LOG.error "Exception caught: #{ex.class.to_s}\n"
ferencd@0 48 raise
ferencd@0 49 end
ferencd@0 50
ferencd@0 51 break if res.cmd_tuples == 0
ferencd@0 52 res.clear
ferencd@0 53 game_id = 'S' + Utils.random_string(8)
ferencd@0 54
ferencd@0 55 end
ferencd@0 56 game_id
ferencd@0 57 end
ferencd@0 58
ferencd@0 59 #
ferencd@0 60 # Returns the level to which this gid is associated
ferencd@0 61 #
ferencd@0 62 def Database.get_db_level_for_gid(gid)
ferencd@0 63 level_no = 1
ferencd@0 64 loop do
ferencd@0 65 begin
ferencd@0 66 res = @@conn.exec_prepared 'sel_level_no_prep_stmt', ["#{gid}"]
ferencd@0 67 rescue => ex
ferencd@0 68 $LOG.error "Exception caught: #{ex.class.to_s}\n"
ferencd@0 69 raise
ferencd@0 70 end
ferencd@0 71 return -1 if res.cmd_tuples == 0
ferencd@0 72 level_no = res[0]
ferencd@0 73 res.clear
ferencd@0 74 break
ferencd@0 75 end
ferencd@0 76 level_no['level_number'].to_i
ferencd@0 77 end
ferencd@0 78
ferencd@0 79 #
ferencd@0 80 # Updates the level number for the given game ID to reflect th current state
ferencd@0 81 #
ferencd@0 82 def Database.update_level_number_for_gid(level_number, gid)
ferencd@0 83 loop do
ferencd@0 84 begin
ferencd@0 85 res = @@conn.exec_prepared 'upd_prep_stmt', [level_number, "#{gid}"]
ferencd@0 86 rescue => ex
ferencd@0 87 $LOG.error "Exception caught: #{ex.class.to_s}\n"
ferencd@0 88 raise
ferencd@0 89 end
ferencd@0 90 break if res.cmd_tuples == 0
ferencd@0 91 res.clear
ferencd@0 92 break
ferencd@0 93 end
ferencd@0 94 end
ferencd@0 95
ferencd@0 96 end