Module: Garden::Cycles
- Included in:
- Garden
- Defined in:
- lib/garden_cycles.rb
Overview
The Cycles module is a set of method used by the Garden’s fork. You will not need to use these methods unless you plan on refactoring the Garden.
- Author
-
lp ([email protected])
- Copyright
-
2008 Louis-Philippe Perron - Released under the terms of the MIT license
:title:Cycles
Instance Method Summary collapse
- #crop_writable(writable) ⇒ Object
- #route_message_blocks ⇒ Object
- #seed_available_rows ⇒ Object
- #set_my_containers ⇒ Object
- #sprout_readable(readable) ⇒ Object
Instance Method Details
#crop_writable(writable) ⇒ Object
27 28 29 30 31 32 33 34 35 |
# File 'lib/garden_cycles.rb', line 27 def crop_writable(writable) writable.each do |o_socket| if @writer[:buffer][o_socket.to_s] == '' || @writer[:buffer][o_socket.to_s] == nil remove_writable(o_socket) else write_raw(o_socket) end end end |
#route_message_blocks ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/garden_cycles.rb', line 37 def until @message_block_queue.empty? = @message_block_queue.shift case [0] when :seed place_seed_in_queue() when :row this_row_is_available() when :crop save_crop_for() when :growth report_growth() when :harvest harvest_some() when :close close_all() else [2] = false add_writable() end end end |
#seed_available_rows ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/garden_cycles.rb', line 62 def seed_available_rows catch :fill_rows do loop do throw :fill_rows if @waiting_rows.empty? if @seed_all_message_block && @seed_all_message_block[4][:row_done].size != @seed_all_message_block[1] row_socket_path = @waiting_rows.shift unless @seed_all_message_block[4][:row_done].include?( row_socket_path ) add_writable([:seed,:all,@seed_all_message_block[2],row_socket_path]) @seed_all_message_block[4][:row_done] << row_socket_path else @waiting_rows << row_socket_path end elsif @init_message_block && @init_message_block[4][:row_done].size != @init_message_block[2] row_socket_path = @waiting_rows.shift unless @init_message_block[4][:row_done].include?( row_socket_path ) add_writable([:seed,:init,'init_status',row_socket_path]) @init_message_block[4][:row_done] << row_socket_path else @waiting_rows << row_socket_path end elsif ! @seeds.empty? seed = @seeds.shift; @sprouts[seed[:id]] = seed add_writable([:seed,:sprout,seed,@waiting_rows.shift]) elsif @close_message_block && ! @waiting_rows.empty? add_writable([:seed,:quit,nil,@waiting_rows.shift]) else throw :fill_rows end end end end |
#set_my_containers ⇒ Object
10 11 12 13 14 15 |
# File 'lib/garden_cycles.rb', line 10 def set_my_containers @close_message_block = nil; @full_crop_message_block = nil @init_message_block = nil; @seed_all_message_block = nil @harvest_queue = []; @waiting_rows = []; @message_block_queue = [] @seeds = []; @sprouts = []; @crops = []; @id = 0 end |
#sprout_readable(readable) ⇒ Object
17 18 19 20 21 22 23 24 25 |
# File 'lib/garden_cycles.rb', line 17 def sprout_readable(readable) readable.each do |i_socket| if i_socket == @my_socket add_readable(i_socket) else readable_main(i_socket) end end end |