murasaki 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/lib/murasaki.rb +1 -0
- data/lib/murasaki/event_loop.rb +28 -9
- data/lib/murasaki/io.rb +11 -0
- data/lib/murasaki/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ad4a049570311120ece072730c1b005bc90f5854878fcaf1b5e1a619e26517dc
|
4
|
+
data.tar.gz: db0f726b3185842c74bf3936e6272de4ae61d80533cf711bd785ea61a20746e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c329162006a69c8f321d2fe74cbe16dd7a4cf7368779f19d2ce0b285d1081ffbdd05ef6aea6655890e239535423e136c0701706104124482c8fe18fda50ebab
|
7
|
+
data.tar.gz: ca8b386203e419ce8931134bb057931d504aac4157c8773da4b2d8c00e0f57ab44a5b9a681db4cd42d3795121d2b35e0314bbc420d327adab4732e6c9376323a
|
data/lib/murasaki.rb
CHANGED
data/lib/murasaki/event_loop.rb
CHANGED
@@ -15,25 +15,34 @@ module EventLoop
|
|
15
15
|
@queue = Hash.new
|
16
16
|
# Root fiber
|
17
17
|
@root_fiber = Fiber.current
|
18
|
+
nil
|
18
19
|
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
EventLoop.config
|
19
24
|
|
25
|
+
module EventLoop
|
26
|
+
class << self
|
20
27
|
# Add timer in event loop
|
21
28
|
# @param [EventLoop::Timer] timer timer to insert
|
22
29
|
# @return [nil] nil
|
23
30
|
def add_timer(timer)
|
24
|
-
config if @selector.nil?
|
25
31
|
timer.start_time = Time.now.to_f + timer.time
|
26
32
|
@timers << timer
|
27
33
|
nil
|
28
34
|
end
|
29
35
|
|
36
|
+
def remove_timer(timer)
|
37
|
+
@timers.delete(timer)
|
38
|
+
end
|
39
|
+
|
30
40
|
# Register I/O event with queue protection
|
31
41
|
# @param [IO] io io to register
|
32
42
|
# @param [Symbol] interest :r for read only, :w for write only, and :rw for both
|
33
43
|
# @yield what to run when io callbacks
|
34
44
|
# @return [nil] nil
|
35
45
|
def register(io, interest=(:rw), &callback)
|
36
|
-
config if @selector.nil?
|
37
46
|
if @queue[io.to_i].nil?
|
38
47
|
@queue[io.to_i] = Array.new
|
39
48
|
register_raw(io, interest, callback)
|
@@ -49,7 +58,6 @@ module EventLoop
|
|
49
58
|
# @param [Proc] callback what to run when io callbacks
|
50
59
|
# @return [nil] nil
|
51
60
|
def register_raw(io, interest=(:rw), callback)
|
52
|
-
config if @selector.nil?
|
53
61
|
@selector.register(io, interest)
|
54
62
|
@ios[io] = { callback: callback }
|
55
63
|
nil
|
@@ -59,18 +67,31 @@ module EventLoop
|
|
59
67
|
# @param [IO] io io to deregister
|
60
68
|
# @return [nil] nil
|
61
69
|
def deregister(io)
|
62
|
-
fd = io.to_i
|
63
70
|
@selector.deregister(io)
|
64
71
|
@ios.delete(io)
|
65
|
-
|
66
|
-
|
72
|
+
unless io.closed?
|
73
|
+
# If the I/O closed accidentally, it should manually release the queue
|
74
|
+
# Otherwise, there would be a memory leak
|
75
|
+
fd = io.fileno
|
76
|
+
next_register = @queue[fd].shift
|
77
|
+
next_register.nil? ? @queue.delete(fd) : register_raw(*next_register)
|
78
|
+
end
|
79
|
+
nil
|
80
|
+
end
|
81
|
+
|
82
|
+
# Manually release queues of closed I/O
|
83
|
+
# if the I/O has accidentally closed
|
84
|
+
# @param [IO] io io to release
|
85
|
+
# @return [nil] nil
|
86
|
+
def release_queue(io)
|
87
|
+
fd = io.fileno
|
88
|
+
@queue.delete(fd)
|
67
89
|
nil
|
68
90
|
end
|
69
91
|
|
70
92
|
# Run I/O selector once
|
71
93
|
# @return [nil] nil
|
72
94
|
def run_once
|
73
|
-
config if @selector.nil?
|
74
95
|
@selector.select(0.2) do |monitor| # Timeout for 0.2 secs
|
75
96
|
@ios[monitor.io][:callback].call(monitor)
|
76
97
|
end
|
@@ -81,7 +102,6 @@ module EventLoop
|
|
81
102
|
# Run timer once
|
82
103
|
# @return [nil] nil
|
83
104
|
def timer_once
|
84
|
-
config if @selector.nil?
|
85
105
|
now_time = Time.now.to_f
|
86
106
|
@timers.delete_if do |timer|
|
87
107
|
if timer.start_time < now_time
|
@@ -118,7 +138,6 @@ module EventLoop
|
|
118
138
|
end
|
119
139
|
|
120
140
|
def root_fiber
|
121
|
-
config if @selector.nil?
|
122
141
|
@root_fiber
|
123
142
|
end
|
124
143
|
end
|
data/lib/murasaki/io.rb
ADDED
data/lib/murasaki/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: murasaki
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- HeckPsi Lab
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-06-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nio4r
|
@@ -34,6 +34,7 @@ files:
|
|
34
34
|
- LICENSE
|
35
35
|
- lib/murasaki.rb
|
36
36
|
- lib/murasaki/event_loop.rb
|
37
|
+
- lib/murasaki/io.rb
|
37
38
|
- lib/murasaki/promise.rb
|
38
39
|
- lib/murasaki/timer.rb
|
39
40
|
- lib/murasaki/version.rb
|
@@ -60,7 +61,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
60
61
|
version: '0'
|
61
62
|
requirements: []
|
62
63
|
rubyforge_project:
|
63
|
-
rubygems_version: 2.6
|
64
|
+
rubygems_version: 2.7.6
|
64
65
|
signing_key:
|
65
66
|
specification_version: 4
|
66
67
|
summary: Event Kernel for Ruby
|