class Command
# Factory method
#
- def Command.factory(str, player)
+ def Command.factory(str, player, time=Time.now)
cmd = nil
case str
when ""
cmd = ErrorCommand.new(str, player)
end
+ cmd.time = time
return cmd
end
def initialize(str, player)
@str = str
@player = player
+ @time = Time.now # this should be replaced later with a real time
end
+ attr_accessor :time
end
# Application-level protocol for Keep-Alive.
if (@player.status == "game")
array_str = @str.split(",")
move = array_str.shift
+ if @player.game.last_move &&
+ @player.game.last_move.split(",").first == move
+ log_warning("Received two sequencial identical moves [#{move}] from #{@player.name}. The last one was ignored.")
+ return :continue
+ end
additional = array_str.shift
comment = nil
if /^'(.*)/ =~ additional
comment = array_str.unshift("'*#{$1.toeuc}")
end
- s = @player.game.handle_one_move(move, @player)
+ s = @player.game.handle_one_move(move, @player, @time)
@player.game.log_game(Kconv.toeuc(comment.first)) if (comment && comment.first && !s)
return :return if (s && @player.protocol == LoginCSA::PROTOCOL)
end
def in_game_status
rc = :continue
- s = @player.game.handle_one_move(@str, @player)
+ s = @player.game.handle_one_move(@str, @player, @time)
rc = :return if (s && @player.protocol == LoginCSA::PROTOCOL)
return rc
def ==(rhs)
return rhs != nil &&
rhs.is_a?(MonitorHandler) &&
- @player = rhs.player &&
- @type = rhs.type
+ @player == rhs.player &&
+ @type == rhs.type
end
def write_safe(game_id, str)
end
end
- class Monitor2OffCommand < MonitorOffCommand # same
+ class Monitor2OffCommand < MonitorOffCommand
def initialize(str, player, game)
super
end
+
+ def call
+ if (@game)
+ @game.monitoroff(MonitorHandler2.new(@player))
+ end
+ return :continue
+ end
end
# Command of HELP