Class: Event::Backend::Select

Inherits:
Object
  • Object
show all
Defined in:
lib/event/backend/select.rb

Instance Method Summary collapse

Constructor Details

#initialize(loop) ⇒ Select

Returns a new instance of Select.



24
25
26
27
28
29
# File 'lib/event/backend/select.rb', line 24

def initialize(loop)
	@loop = loop
	
	@readable = {}
	@writable = {}
end

Instance Method Details

#io_wait(fiber, io, events) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
# File 'lib/event/backend/select.rb', line 31

def io_wait(fiber, io, events)
	if (events & READABLE) > 0 or (events & PRIORITY) > 0
		@readable[io] = fiber
	end
	
	if (events & WRITABLE) > 0
		@writable[io] = fiber
	end
	
	@loop.transfer
end

#select(duration = nil) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/event/backend/select.rb', line 43

def select(duration = nil)
	readable, writable, _ = IO.select(@readable.keys, @writable.keys, nil, duration)
	
	ready = {}
	
	readable&.each do |io|
		fiber = @readable.delete(io)
		ready[fiber] = true
	end
	
	writable&.each do |io|
		fiber = @writable.delete(io)
		ready[fiber] = true
	end
	
	ready.each_key do |fiber|
		fiber.transfer
	end
end