Class: DIY::Worker

Inherits:
Object
  • Object
show all
Includes:
DRbUndumped
Defined in:
lib/diy/worker.rb

Instance Method Summary collapse

Constructor Details

#initialize(live) ⇒ Worker

Returns a new instance of Worker.



11
12
13
14
15
16
17
18
# File 'lib/diy/worker.rb', line 11

def initialize(live)
  @live = live
  @recv_t = nil
  @start = false
  @queue = Queue.new
  loop_recv
  loop_callback
end

Instance Method Details

#inject(pkts) ⇒ Object

发包



21
22
23
24
25
26
# File 'lib/diy/worker.rb', line 21

def inject(pkts)
  pkts.each do |pkt|
    DIY::Logger.info "send pkt: #{pkt.inspect}"
    @live.send_packet(pkt.content)
  end
end

#inspectObject



67
68
69
# File 'lib/diy/worker.rb', line 67

def inspect
  "<Worker: #{@live.net}>"
end

#loop_callbackObject



38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/diy/worker.rb', line 38

def loop_callback
  @callback_t = Thread.new do 
    #~ DIY::Logger.info "start thread callbacking pkt..."
    loop do
      begin
        pkt = @queue.pop
        #~ DIY::Logger.info "callback: #{pkt}"
        @block.call(pkt) if @block
      rescue DRb::DRbConnError
        DIY::Logger.info "closed connection by controller"
      end
    end
  end
end

#loop_recvObject



28
29
30
31
32
33
34
35
36
# File 'lib/diy/worker.rb', line 28

def loop_recv
  @recv_t = Thread.new do
    DIY::Logger.info "start thread recving pkt..."
    @live.loop do |this, pkt|
      next unless @start
      @queue.push(pkt.body)
    end
  end
end

#ready(&block) ⇒ Object

收包



54
55
56
57
58
59
# File 'lib/diy/worker.rb', line 54

def ready(&block)
  DIY::Logger.info("start recv pkt")
  @block = block
  @queue.clear
  @start = true
end

#terminalObject



61
62
63
64
65
# File 'lib/diy/worker.rb', line 61

def terminal
  DIY::Logger.info("stop recv pkt")
  @start = false
  @queue.clear
end