1 require 'shogi_server/config'
2 require 'shogi_server/game'
14 def initialize(game_name, moves, owner, count)
15 raise "owner name is required" if owner && !owner.instance_of?(String)
16 @game_name, @moves, @owner, @count = game_name, moves, owner, count
24 return (@game_name == rhs.game_name &&
25 @moves == rhs.moves &&
26 @owner == rhs.owner &&
31 class NilBuoyGame < BuoyGame
33 super(nil, nil, nil, 0)
41 def Buoy.game_name?(str)
42 return /^buoy_.*\-\d+\-\d+$/.match(str) ? true : false
45 def initialize(conf = {})
46 @conf = $config || Config.new
47 @conf.merge!(conf, true)
48 filename = @conf[:buoy, :filename] || File.join(@conf[:topdir], "buoy.yaml")
49 @db = YAML::Store.new(filename)
54 def is_new_game?(game_name)
55 @db.transaction(true) do
56 return !@db.root?(game_name)
60 def add_game(buoy_game)
62 if @db.root?(buoy_game.game_name)
65 hash = {'moves' => buoy_game.moves,
66 'owner' => buoy_game.owner,
67 'count' => buoy_game.count}
68 @db[buoy_game.game_name] = hash
73 def update_game(buoy_game)
75 if @db.root?(buoy_game.game_name)
76 hash = {'moves' => buoy_game.moves,
77 'owner' => buoy_game.owner,
78 'count' => buoy_game.count}
79 @db[buoy_game.game_name] = hash
86 def delete_game(buoy_game)
88 @db.delete(buoy_game.game_name)
92 def get_game(game_name)
93 @db.transaction(true) do
98 count = hash['count'].to_i
99 return BuoyGame.new(game_name, moves, owner, count)
101 return NilBuoyGame.new
106 def decrement_count(buoy_game)
107 return if buoy_game.instance_of?(NilBuoyGame)
109 buoy_game.decrement_count
110 if buoy_game.count > 0
111 update_game buoy_game
112 log_message "Buoy #{buoy_game.game_name} remains #{buoy_game.count} slots."
114 delete_game buoy_game
115 log_message "Buoy #{buoy_game.game_name} finished."
120 end # module ShogiServer