Class: DIY::StrategyBuilder
- Inherits:
-
Object
- Object
- DIY::StrategyBuilder
- Defined in:
- lib/diy/strategy_builder.rb
Instance Attribute Summary collapse
-
#queue ⇒ Object
readonly
Returns the value of attribute queue.
Instance Method Summary collapse
- #add(strategy) ⇒ Object (also: #<<)
- #call(hope_pkt, recv_pkt, queue) ⇒ Object
-
#initialize ⇒ StrategyBuilder
constructor
A new instance of StrategyBuilder.
- #logger ⇒ Object
- #logger=(logger) ⇒ Object
Constructor Details
#initialize ⇒ StrategyBuilder
Returns a new instance of StrategyBuilder.
5 6 7 8 |
# File 'lib/diy/strategy_builder.rb', line 5 def initialize @ins = [] @logger = DIY::Logger end |
Instance Attribute Details
#queue ⇒ Object (readonly)
Returns the value of attribute queue.
9 10 11 |
# File 'lib/diy/strategy_builder.rb', line 9 def queue @queue end |
Instance Method Details
#add(strategy) ⇒ Object Also known as: <<
11 12 13 |
# File 'lib/diy/strategy_builder.rb', line 11 def add(strategy) @ins << strategy end |
#call(hope_pkt, recv_pkt, queue) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/diy/strategy_builder.rb', line 24
def call(hope_pkt, recv_pkt, queue)
logger.debug("recv_pkt, I hope: #{ Utils.pp(hope_pkt) rescue nil }...")
return if hope_pkt.nil?
@ins.each do |strategy|
begin
ret = strategy.call(hope_pkt.content, recv_pkt.content, queue)
rescue Exception => e
#~ logger.error("user strategy exception: #{e.class} -> #{e.message}")
raise StrategyCallError.new(e)
else
if ret == Strategy::OK
logger.info("pkt same: #{hope_pkt.pretty_print}")
queue.shift
return
elsif ret == Strategy::OK_NO_POP
logger.info("pkt skip:")
return
elsif ret == Strategy::FAIL
logger.warn("pkt fail:")
logger.warn("pkt fail: hope_pkt is #{hope_pkt.pretty_print}")
logger.warn("pkt fail: recv_pkt is #{recv_pkt.pretty_print}")
e = RuntimeError.new("Strategy FAIL: hope #{hope_pkt.pretty_print} but get #{recv_pkt.pretty_print}")
e.set_backtrace(caller) # not used
raise UnExpectPacketError.new(e)
elsif ret == Strategy::NONE
#~ logger.debug("pkt jumpped:")
next
elsif ret == Strategy::NONE_HOPE_POP
queue.shift
# skip this round if nil found
return unless hope_pkt = queue.first
# redo strategy
retry
end # end of if
end # end of begin
end # end of each
end
|
#logger ⇒ Object
20 21 22 |
# File 'lib/diy/strategy_builder.rb', line 20 def logger @logger end |
#logger=(logger) ⇒ Object
16 17 18 |
# File 'lib/diy/strategy_builder.rb', line 16 def logger=(logger) @logger = logger end |