event 0.7.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/event/backend.rb DELETED
@@ -1,49 +0,0 @@
1
- # Copyright, 2021, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining a copy
4
- # of this software and associated documentation files (the "Software"), to deal
5
- # in the Software without restriction, including without limitation the rights
6
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- # copies of the Software, and to permit persons to whom the Software is
8
- # furnished to do so, subject to the following conditions:
9
- #
10
- # The above copyright notice and this permission notice shall be included in
11
- # all copies or substantial portions of the Software.
12
- #
13
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- # THE SOFTWARE.
20
-
21
- require_relative 'backend/select'
22
-
23
- module Event
24
- module Backend
25
- def self.default(env = ENV)
26
- if backend = env['EVENT_BACKEND']&.to_sym
27
- if Event::Backend.const_defined?(backend)
28
- return Event::Backend.const_get(backend)
29
- else
30
- warn "Could not find EVENT_BACKEND=#{backend}!"
31
- end
32
- end
33
-
34
- if self.const_defined?(:URing)
35
- return Event::Backend::URing
36
- elsif self.const_defined?(:KQueue)
37
- return Event::Backend::KQueue
38
- elsif self.const_defined?(:EPoll)
39
- return Event::Backend::EPoll
40
- else
41
- return Event::Backend::Select
42
- end
43
- end
44
-
45
- def self.new(...)
46
- default.new(...)
47
- end
48
- end
49
- end
@@ -1,108 +0,0 @@
1
- # Copyright, 2021, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining a copy
4
- # of this software and associated documentation files (the "Software"), to deal
5
- # in the Software without restriction, including without limitation the rights
6
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- # copies of the Software, and to permit persons to whom the Software is
8
- # furnished to do so, subject to the following conditions:
9
- #
10
- # The above copyright notice and this permission notice shall be included in
11
- # all copies or substantial portions of the Software.
12
- #
13
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- # THE SOFTWARE.
20
-
21
- require "event/version"
22
-
23
- module Event
24
- module Debug
25
- class Selector
26
- def initialize(selector)
27
- @selector = selector
28
-
29
- @readable = {}
30
- @writable = {}
31
- @priority = {}
32
- end
33
-
34
- def close
35
- if @selector.nil?
36
- raise "Selector already closed!"
37
- end
38
-
39
- @selector.close
40
- @selector = nil
41
- end
42
-
43
- def io_wait(fiber, io, events)
44
- register_readable(fiber, io, events)
45
- end
46
-
47
- def select(duration = nil)
48
- @selector.select(duration)
49
- end
50
-
51
- private
52
-
53
- def register_readable(fiber, io, events)
54
- if (events & READABLE) > 0
55
- if @readable.key?(io)
56
- raise "Cannot wait for #{io} to become readable from multiple fibers."
57
- end
58
-
59
- begin
60
- @readable[io] = fiber
61
-
62
- register_writable(fiber, io, events)
63
- ensure
64
- @readable.delete(io)
65
- end
66
- else
67
- register_writable(fiber, io, events)
68
- end
69
- end
70
-
71
- def register_writable(fiber, io, events)
72
- if (events & WRITABLE) > 0
73
- if @writable.key?(io)
74
- raise "Cannot wait for #{io} to become writable from multiple fibers."
75
- end
76
-
77
- begin
78
- @writable[io] = fiber
79
-
80
- register_priority(fiber, io, events)
81
- ensure
82
- @writable.delete(io)
83
- end
84
- else
85
- register_priority(fiber, io, events)
86
- end
87
- end
88
-
89
- def register_priority(fiber, io, events)
90
- if (events & PRIORITY) > 0
91
- if @priority.key?(io)
92
- raise "Cannot wait for #{io} to become priority from multiple fibers."
93
- end
94
-
95
- begin
96
- @priority[io] = fiber
97
-
98
- @selector.io_wait(fiber, io, events)
99
- ensure
100
- @priority.delete(io)
101
- end
102
- else
103
- @selector.io_wait(fiber, io, events)
104
- end
105
- end
106
- end
107
- end
108
- end