ntl-actor 1.4.0 → 1.4.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 +4 -4
- data/lib/actor/actor.rb +1 -1
- data/lib/actor/build.rb +6 -6
- data/lib/actor/controls.rb +2 -2
- data/lib/actor/messages.rb +3 -3
- data/lib/actor/messaging/address/controls.rb +2 -2
- data/lib/actor/messaging/address/none.rb +1 -1
- data/lib/actor/messaging/address/substitute.rb +1 -1
- data/lib/actor/messaging/address.rb +4 -4
- data/lib/actor/messaging/message/name.rb +5 -5
- data/lib/actor/messaging/message.rb +6 -6
- data/lib/actor/messaging/publish/substitute.rb +11 -11
- data/lib/actor/messaging/publish.rb +8 -8
- data/lib/actor/messaging/queue/substitute.rb +7 -7
- data/lib/actor/messaging/queue.rb +2 -2
- data/lib/actor/messaging/read/substitute.rb +4 -4
- data/lib/actor/messaging/read.rb +11 -11
- data/lib/actor/messaging/send/substitute.rb +7 -7
- data/lib/actor/messaging/send.rb +5 -5
- data/lib/actor/module/dependencies.rb +4 -4
- data/lib/actor/module/handler/macro.rb +3 -3
- data/lib/actor/module/handler/method_name.rb +2 -2
- data/lib/actor/module/handler/send_next_message.rb +1 -1
- data/lib/actor/module/handler.rb +5 -5
- data/lib/actor/module/run_loop.rb +2 -2
- data/lib/actor/module/start.rb +2 -2
- data/lib/actor/module/suspend_resume/controls.rb +2 -2
- data/lib/actor/module/suspend_resume/handle.rb +2 -2
- data/lib/actor/module/suspend_resume/initialize.rb +1 -1
- data/lib/actor/module/suspend_resume.rb +3 -3
- data/lib/actor/start.rb +9 -9
- data/lib/actor/supervisor/address/get.rb +2 -2
- data/lib/actor/supervisor/address/put.rb +2 -2
- data/lib/actor/supervisor/observer.rb +3 -3
- data/lib/actor/supervisor.rb +12 -12
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b6d3e788eda858c8899b193ab2bd4f4d188203e4b0e9004aac11a2e5f12366e5
|
4
|
+
data.tar.gz: 5fbf401688931eb848408e494a7cf7c00795be9b84585e1db02de70cce7d1e12
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c62bdfc7c23527f91e237802736ecb5e778443e4583fc557c061e2ccf634422e0bbc1d58de6672855a5c03dbddf19d4388f798eb087c43da42bfdff2632e8486
|
7
|
+
data.tar.gz: d861709b6781509f12c8c4ff61aafe703f1c9fc752d0f01c130c55ee23e6c45c2f8841912a22a3d391eb1018a233b6d78831e79c986a469d8956d95b08d0bba0
|
data/lib/actor/actor.rb
CHANGED
@@ -4,7 +4,7 @@ module Actor
|
|
4
4
|
# order to bring the constants contained in within the Actor namespace to
|
5
5
|
# the top level. When we do so, it is necessary to prevent the actual mixin
|
6
6
|
# from altering the main object.
|
7
|
-
return if cls.eql?
|
7
|
+
return if cls.eql?(Object)
|
8
8
|
|
9
9
|
cls.class_exec do
|
10
10
|
extend Module::Start
|
data/lib/actor/build.rb
CHANGED
@@ -5,23 +5,23 @@ module Actor
|
|
5
5
|
attr_reader :block
|
6
6
|
attr_reader :cls
|
7
7
|
|
8
|
-
def initialize
|
8
|
+
def initialize(cls, arguments, keyword_arguments, &block)
|
9
9
|
@arguments = arguments
|
10
10
|
@keyword_arguments = keyword_arguments
|
11
11
|
@block = block
|
12
12
|
@cls = cls
|
13
13
|
end
|
14
14
|
|
15
|
-
def self.call
|
16
|
-
instance = new
|
15
|
+
def self.call(cls, *arguments, **keyword_arguments, &block)
|
16
|
+
instance = new(cls, arguments, keyword_arguments, &block)
|
17
17
|
instance.()
|
18
18
|
end
|
19
19
|
|
20
20
|
def call
|
21
|
-
if cls.respond_to?
|
22
|
-
method = cls.method
|
21
|
+
if cls.respond_to?(:build)
|
22
|
+
method = cls.method(:build)
|
23
23
|
else
|
24
|
-
method = cls.method
|
24
|
+
method = cls.method(:new)
|
25
25
|
end
|
26
26
|
|
27
27
|
if block
|
data/lib/actor/controls.rb
CHANGED
data/lib/actor/messages.rb
CHANGED
@@ -4,15 +4,15 @@ module Actor
|
|
4
4
|
extend Messaging::Message
|
5
5
|
end
|
6
6
|
|
7
|
-
ActorStarted = Struct.new
|
7
|
+
ActorStarted = Struct.new(:address, :actor) do
|
8
8
|
include Messaging::Message
|
9
9
|
end
|
10
10
|
|
11
|
-
ActorStopped = Struct.new
|
11
|
+
ActorStopped = Struct.new(:address, :actor) do
|
12
12
|
include Messaging::Message
|
13
13
|
end
|
14
14
|
|
15
|
-
ActorCrashed = Struct.new
|
15
|
+
ActorCrashed = Struct.new(:error, :actor) do
|
16
16
|
include Messaging::Message
|
17
17
|
end
|
18
18
|
|
@@ -1,13 +1,13 @@
|
|
1
1
|
module Actor
|
2
2
|
module Messaging
|
3
|
-
Address = Struct.new
|
3
|
+
Address = Struct.new(:id, :queue)
|
4
4
|
|
5
5
|
class Address
|
6
|
-
def self.build
|
6
|
+
def self.build(max_queue_size: nil)
|
7
7
|
id = SecureRandom.uuid
|
8
|
-
queue = Queue.get
|
8
|
+
queue = Queue.get(max_size: max_queue_size)
|
9
9
|
|
10
|
-
new
|
10
|
+
new(id, queue)
|
11
11
|
end
|
12
12
|
|
13
13
|
def actors_waiting
|
@@ -4,18 +4,18 @@ module Actor
|
|
4
4
|
module Name
|
5
5
|
PATTERN = %r{(?:\A|[a-z0-9])[A-Z]}
|
6
6
|
|
7
|
-
def self.get
|
7
|
+
def self.get(value)
|
8
8
|
case value
|
9
9
|
when Symbol
|
10
10
|
value
|
11
11
|
|
12
12
|
when ::Module, Class
|
13
|
-
get
|
13
|
+
get(value.name)
|
14
14
|
|
15
15
|
when String
|
16
|
-
*, inner_namespace = value.split
|
16
|
+
*, inner_namespace = value.split('::')
|
17
17
|
|
18
|
-
inner_namespace.gsub!
|
18
|
+
inner_namespace.gsub!(PATTERN) do |str|
|
19
19
|
str.downcase!
|
20
20
|
str.insert 1, '_' if str.length == 2
|
21
21
|
str
|
@@ -24,7 +24,7 @@ module Actor
|
|
24
24
|
inner_namespace.to_sym
|
25
25
|
|
26
26
|
else
|
27
|
-
get
|
27
|
+
get(value.class)
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
@@ -17,7 +17,7 @@ module Actor
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.=== object
|
20
|
-
if object.is_a?
|
20
|
+
if object.is_a?(Symbol)
|
21
21
|
true
|
22
22
|
else
|
23
23
|
super
|
@@ -26,14 +26,14 @@ module Actor
|
|
26
26
|
|
27
27
|
module Matcher
|
28
28
|
def === other
|
29
|
-
other_message_name = Name.get
|
29
|
+
other_message_name = Name.get(other)
|
30
30
|
|
31
31
|
message_name == other_message_name
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
35
|
module MessageName
|
36
|
-
def self.included
|
36
|
+
def self.included(cls)
|
37
37
|
cls.class_exec do
|
38
38
|
extend ClassMethod
|
39
39
|
|
@@ -41,8 +41,8 @@ module Actor
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
def self.extended
|
45
|
-
receiver.extend
|
44
|
+
def self.extended(receiver)
|
45
|
+
receiver.extend(ClassMethod)
|
46
46
|
end
|
47
47
|
|
48
48
|
module InstanceMethod
|
@@ -53,7 +53,7 @@ module Actor
|
|
53
53
|
|
54
54
|
module ClassMethod
|
55
55
|
def message_name
|
56
|
-
Name.get
|
56
|
+
Name.get(name)
|
57
57
|
end
|
58
58
|
end
|
59
59
|
end
|
@@ -12,39 +12,39 @@ module Actor
|
|
12
12
|
@records = []
|
13
13
|
end
|
14
14
|
|
15
|
-
def register
|
15
|
+
def register(address)
|
16
16
|
registered_addresses << address
|
17
17
|
end
|
18
18
|
|
19
|
-
def unregister
|
19
|
+
def unregister(address)
|
20
20
|
unregistered_addresses << address
|
21
21
|
end
|
22
22
|
|
23
|
-
def call
|
23
|
+
def call(message, wait: nil)
|
24
24
|
wait = false if wait.nil?
|
25
25
|
|
26
|
-
record = Record.new
|
26
|
+
record = Record.new(message, wait)
|
27
27
|
|
28
28
|
records << record
|
29
29
|
end
|
30
30
|
|
31
|
-
def registered?
|
31
|
+
def registered?(address=nil)
|
32
32
|
if address.nil?
|
33
33
|
registered_addresses.any?
|
34
34
|
else
|
35
|
-
registered_addresses.include?
|
35
|
+
registered_addresses.include?(address)
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
def unregistered?
|
39
|
+
def unregistered?(address=nil)
|
40
40
|
if address.nil?
|
41
41
|
unregistered_addresses.any?
|
42
42
|
else
|
43
|
-
unregistered_addresses.include?
|
43
|
+
unregistered_addresses.include?(address)
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
-
def published?
|
47
|
+
def published?(message=nil, wait: nil)
|
48
48
|
records.each do |record|
|
49
49
|
next unless message.nil? or record.message == message
|
50
50
|
next unless wait.nil? or record.wait == wait
|
@@ -55,9 +55,9 @@ module Actor
|
|
55
55
|
false
|
56
56
|
end
|
57
57
|
|
58
|
-
Record = Struct.new
|
58
|
+
Record = Struct.new(:message, :wait)
|
59
59
|
|
60
|
-
singleton_class.send
|
60
|
+
singleton_class.send(:alias_method, :build, :new) # subst-attr compat
|
61
61
|
end
|
62
62
|
end
|
63
63
|
end
|
@@ -9,11 +9,11 @@ module Actor
|
|
9
9
|
@addresses = Set.new
|
10
10
|
end
|
11
11
|
|
12
|
-
def self.build
|
12
|
+
def self.build(*addresses)
|
13
13
|
instance = new
|
14
14
|
|
15
15
|
addresses.each do |address|
|
16
|
-
instance.register
|
16
|
+
instance.register(address)
|
17
17
|
end
|
18
18
|
|
19
19
|
instance.send = Send.new
|
@@ -21,22 +21,22 @@ module Actor
|
|
21
21
|
instance
|
22
22
|
end
|
23
23
|
|
24
|
-
def register
|
24
|
+
def register(address)
|
25
25
|
addresses << address
|
26
26
|
end
|
27
27
|
|
28
|
-
def unregister
|
29
|
-
addresses.delete
|
28
|
+
def unregister(address)
|
29
|
+
addresses.delete(address)
|
30
30
|
end
|
31
31
|
|
32
|
-
def call
|
32
|
+
def call(message, wait: nil)
|
33
33
|
addresses.each do |address|
|
34
34
|
send.(message, address, wait: wait)
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
def registered?
|
39
|
-
addresses.include?
|
38
|
+
def registered?(address)
|
39
|
+
addresses.include?(address)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
@@ -11,7 +11,7 @@ module Actor
|
|
11
11
|
instance
|
12
12
|
end
|
13
13
|
|
14
|
-
def deq
|
14
|
+
def deq(non_block=nil)
|
15
15
|
if non_block
|
16
16
|
raise ThreadError
|
17
17
|
else
|
@@ -23,15 +23,15 @@ module Actor
|
|
23
23
|
true
|
24
24
|
end
|
25
25
|
|
26
|
-
def enq
|
26
|
+
def enq(message, non_block=nil)
|
27
27
|
non_block = false if non_block.nil?
|
28
28
|
|
29
|
-
record = Record.new
|
29
|
+
record = Record.new(message, non_block)
|
30
30
|
@enqueued_records << record
|
31
31
|
record
|
32
32
|
end
|
33
33
|
|
34
|
-
def enqueued?
|
34
|
+
def enqueued?(message=nil, wait: nil)
|
35
35
|
@enqueued_records.any? do |record|
|
36
36
|
next unless message.nil? or record.message == message
|
37
37
|
next unless wait.nil? or record.non_block == !wait
|
@@ -48,10 +48,10 @@ module Actor
|
|
48
48
|
0
|
49
49
|
end
|
50
50
|
|
51
|
-
WouldBlockError = Class.new
|
51
|
+
WouldBlockError = Class.new(StandardError)
|
52
52
|
|
53
|
-
Record = Struct.new
|
54
|
-
singleton_class.send
|
53
|
+
Record = Struct.new(:message, :non_block)
|
54
|
+
singleton_class.send(:alias_method, :build, :new) # subst-attr compat
|
55
55
|
end
|
56
56
|
end
|
57
57
|
end
|
@@ -7,12 +7,12 @@ module Actor
|
|
7
7
|
def self.build
|
8
8
|
queue = Queue::Substitute.new
|
9
9
|
|
10
|
-
instance = new
|
11
|
-
instance.extend
|
10
|
+
instance = new(queue)
|
11
|
+
instance.extend(Controls)
|
12
12
|
instance
|
13
13
|
end
|
14
14
|
|
15
|
-
def call
|
15
|
+
def call(wait: nil)
|
16
16
|
if next_message.nil?
|
17
17
|
super
|
18
18
|
else
|
@@ -21,7 +21,7 @@ module Actor
|
|
21
21
|
end
|
22
22
|
|
23
23
|
module Controls
|
24
|
-
def add
|
24
|
+
def add(message)
|
25
25
|
self.next_message = message
|
26
26
|
end
|
27
27
|
end
|
data/lib/actor/messaging/read.rb
CHANGED
@@ -3,38 +3,38 @@ module Actor
|
|
3
3
|
class Read
|
4
4
|
attr_reader :queue
|
5
5
|
|
6
|
-
def initialize
|
6
|
+
def initialize(queue)
|
7
7
|
@queue = queue
|
8
8
|
end
|
9
9
|
|
10
|
-
def self.build
|
10
|
+
def self.build(address)
|
11
11
|
queue = address.queue
|
12
12
|
|
13
13
|
new queue
|
14
14
|
end
|
15
15
|
|
16
|
-
def self.call
|
17
|
-
instance = build
|
16
|
+
def self.call(address, wait: nil)
|
17
|
+
instance = build(address)
|
18
18
|
|
19
19
|
instance.(wait: wait)
|
20
20
|
end
|
21
21
|
|
22
|
-
def call
|
22
|
+
def call(wait: nil)
|
23
23
|
non_block = wait == false
|
24
24
|
|
25
|
-
queue.deq
|
25
|
+
queue.deq(non_block)
|
26
26
|
|
27
27
|
rescue ThreadError
|
28
28
|
return nil
|
29
29
|
end
|
30
30
|
|
31
|
-
def address?
|
32
|
-
queue?
|
31
|
+
def address?(address)
|
32
|
+
queue?(address.queue)
|
33
33
|
end
|
34
34
|
|
35
|
-
def next_message?
|
35
|
+
def next_message?(message)
|
36
36
|
begin
|
37
|
-
next_message = @queue.deq
|
37
|
+
next_message = @queue.deq(true)
|
38
38
|
rescue ThreadError
|
39
39
|
return false
|
40
40
|
end
|
@@ -42,7 +42,7 @@ module Actor
|
|
42
42
|
next_message == message
|
43
43
|
end
|
44
44
|
|
45
|
-
def queue?
|
45
|
+
def queue?(queue)
|
46
46
|
self.queue == queue
|
47
47
|
end
|
48
48
|
end
|
@@ -8,17 +8,17 @@ module Actor
|
|
8
8
|
@records = []
|
9
9
|
end
|
10
10
|
|
11
|
-
def call
|
11
|
+
def call(message, address, wait: nil)
|
12
12
|
wait = false if wait.nil?
|
13
13
|
|
14
|
-
record = Record.new
|
14
|
+
record = Record.new(message, address, wait)
|
15
15
|
|
16
16
|
records << record
|
17
17
|
end
|
18
18
|
|
19
|
-
def sent?
|
19
|
+
def sent?(message=nil, address: nil, wait: nil)
|
20
20
|
records.each do |record|
|
21
|
-
next unless message.nil? or record.message?
|
21
|
+
next unless message.nil? or record.message?(message)
|
22
22
|
next unless address.nil? or record.address == address
|
23
23
|
next unless wait.nil? or record.wait == wait
|
24
24
|
|
@@ -28,17 +28,17 @@ module Actor
|
|
28
28
|
false
|
29
29
|
end
|
30
30
|
|
31
|
-
Record = Struct.new
|
31
|
+
Record = Struct.new(:message, :address, :wait) do
|
32
32
|
def message? pattern
|
33
33
|
return true if message == pattern
|
34
34
|
|
35
|
-
if pattern.is_a?
|
35
|
+
if pattern.is_a?(Symbol) and message.is_a?(Message)
|
36
36
|
message.message_name == pattern
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
singleton_class.send
|
41
|
+
singleton_class.send(:alias_method, :build, :new) # subst-attr compat
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
data/lib/actor/messaging/send.rb
CHANGED
@@ -1,25 +1,25 @@
|
|
1
1
|
module Actor
|
2
2
|
module Messaging
|
3
3
|
class Send
|
4
|
-
def call
|
4
|
+
def call(message, address, wait: nil)
|
5
5
|
non_block = !wait
|
6
6
|
|
7
7
|
queue = address.queue
|
8
8
|
|
9
|
-
if message.instance_of?
|
9
|
+
if message.instance_of?(::Module)
|
10
10
|
message = message.message_name
|
11
11
|
end
|
12
12
|
|
13
13
|
begin
|
14
|
-
queue.enq
|
14
|
+
queue.enq(message, non_block)
|
15
15
|
rescue ThreadError
|
16
16
|
raise QueueFullError
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
QueueFullError = Class.new
|
20
|
+
QueueFullError = Class.new(StandardError)
|
21
21
|
|
22
|
-
def self.call
|
22
|
+
def self.call(*arguments)
|
23
23
|
instance = new
|
24
24
|
instance.(*arguments)
|
25
25
|
end
|
@@ -19,21 +19,21 @@ module Actor
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def address_configured?
|
22
|
-
address.instance_of?
|
22
|
+
address.instance_of?(Messaging::Address)
|
23
23
|
end
|
24
24
|
|
25
25
|
def reader_configured?
|
26
|
-
read.instance_of?
|
26
|
+
read.instance_of?(Messaging::Read)
|
27
27
|
end
|
28
28
|
|
29
29
|
def send_configured?
|
30
|
-
send.instance_of?
|
30
|
+
send.instance_of?(Messaging::Send)
|
31
31
|
end
|
32
32
|
|
33
33
|
module Configure
|
34
34
|
def configure
|
35
35
|
self.address = Messaging::Address.build
|
36
|
-
self.read = Messaging::Read.build
|
36
|
+
self.read = Messaging::Read.build(address)
|
37
37
|
self.send = Messaging::Send.new
|
38
38
|
|
39
39
|
super
|
@@ -2,10 +2,10 @@ module Actor
|
|
2
2
|
module Module
|
3
3
|
module Handler
|
4
4
|
module Macro
|
5
|
-
def handle
|
6
|
-
method_name = MethodName.get
|
5
|
+
def handle(message_pattern, &handler)
|
6
|
+
method_name = MethodName.get(message_pattern)
|
7
7
|
|
8
|
-
define_method
|
8
|
+
define_method(method_name, &handler)
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
@@ -2,8 +2,8 @@ module Actor
|
|
2
2
|
module Module
|
3
3
|
module Handler
|
4
4
|
module MethodName
|
5
|
-
def self.get
|
6
|
-
message_name = Messaging::Message::Name.get
|
5
|
+
def self.get(message_pattern)
|
6
|
+
message_name = Messaging::Message::Name.get(message_pattern)
|
7
7
|
|
8
8
|
:"handle_#{message_name}"
|
9
9
|
end
|
data/lib/actor/module/handler.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
module Actor
|
2
2
|
module Module
|
3
3
|
module Handler
|
4
|
-
def self.included
|
4
|
+
def self.included(cls)
|
5
5
|
cls.class_exec do
|
6
6
|
extend Macro
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
10
|
-
def handle
|
11
|
-
handler_method_name = MethodName.get
|
10
|
+
def handle(message)
|
11
|
+
handler_method_name = MethodName.get(message)
|
12
12
|
|
13
|
-
return unless handler_method_name and respond_to?
|
13
|
+
return unless handler_method_name and respond_to?(handler_method_name)
|
14
14
|
|
15
|
-
handler_method = method
|
15
|
+
handler_method = method(handler_method_name)
|
16
16
|
|
17
17
|
if handler_method.arity == 0
|
18
18
|
handler_method.()
|
data/lib/actor/module/start.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Actor
|
2
2
|
module Module
|
3
3
|
module Start
|
4
|
-
def start
|
4
|
+
def start(*arguments, include: nil, **keyword_arguments, &block)
|
5
5
|
actor, thread = Actor::Start.(self, *arguments, **keyword_arguments, &block)
|
6
6
|
|
7
7
|
address = actor.address
|
@@ -10,7 +10,7 @@ module Actor
|
|
10
10
|
return_values = [address]
|
11
11
|
|
12
12
|
Array(include).each do |label|
|
13
|
-
argument = { :thread => thread, :actor => actor }.fetch
|
13
|
+
argument = { :thread => thread, :actor => actor }.fetch(label)
|
14
14
|
|
15
15
|
return_values << argument
|
16
16
|
end
|
@@ -2,11 +2,11 @@ module Actor
|
|
2
2
|
module Module
|
3
3
|
module SuspendResume
|
4
4
|
module Handle
|
5
|
-
def handle
|
5
|
+
def handle(message)
|
6
6
|
self.suspended = false if Messages::Resume === message
|
7
7
|
|
8
8
|
if suspended
|
9
|
-
suspend_queue.enq
|
9
|
+
suspend_queue.enq(message, true)
|
10
10
|
else
|
11
11
|
super
|
12
12
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Actor
|
2
2
|
module Module
|
3
3
|
module SuspendResume
|
4
|
-
def self.included
|
4
|
+
def self.included(cls)
|
5
5
|
cls.class_exec do
|
6
6
|
prepend Configure
|
7
7
|
prepend Handle
|
@@ -26,11 +26,11 @@ module Actor
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
def message_deferred?
|
29
|
+
def message_deferred?(message=nil, wait: nil)
|
30
30
|
non_block = wait == false
|
31
31
|
|
32
32
|
begin
|
33
|
-
msg = suspend_queue.deq
|
33
|
+
msg = suspend_queue.deq(true)
|
34
34
|
rescue ThreadError
|
35
35
|
end
|
36
36
|
|
data/lib/actor/start.rb
CHANGED
@@ -5,18 +5,18 @@ module Actor
|
|
5
5
|
attr_reader :actor
|
6
6
|
attr_accessor :supervisor_address
|
7
7
|
|
8
|
-
def initialize
|
8
|
+
def initialize(actor)
|
9
9
|
@actor = actor
|
10
10
|
end
|
11
11
|
|
12
|
-
def self.call
|
13
|
-
if actor_or_actor_class.is_a?
|
12
|
+
def self.call(actor_or_actor_class, *arguments, **keyword_arguments, &block)
|
13
|
+
if actor_or_actor_class.is_a?(Actor) and not actor_or_actor_class.is_a?(Class)
|
14
14
|
actor = actor_or_actor_class
|
15
15
|
else
|
16
16
|
actor = Build.(actor_or_actor_class, *arguments, **keyword_arguments, &block)
|
17
17
|
end
|
18
18
|
|
19
|
-
instance = new
|
19
|
+
instance = new(actor)
|
20
20
|
instance.send = Messaging::Send.new
|
21
21
|
instance.supervisor_address = Supervisor::Address::Get.()
|
22
22
|
instance.()
|
@@ -32,25 +32,25 @@ module Actor
|
|
32
32
|
actor.run_loop
|
33
33
|
actor_stopped
|
34
34
|
rescue => error
|
35
|
-
actor_crashed
|
35
|
+
actor_crashed(error)
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
39
|
return actor, thread
|
40
40
|
end
|
41
41
|
|
42
|
-
def actor_crashed
|
43
|
-
actor_crashed = Messages::ActorCrashed.new
|
42
|
+
def actor_crashed(error)
|
43
|
+
actor_crashed = Messages::ActorCrashed.new(error, actor)
|
44
44
|
send.(actor_crashed, supervisor_address)
|
45
45
|
end
|
46
46
|
|
47
47
|
def actor_started
|
48
|
-
actor_started = Messages::ActorStarted.new
|
48
|
+
actor_started = Messages::ActorStarted.new(address, actor)
|
49
49
|
send.(actor_started, supervisor_address)
|
50
50
|
end
|
51
51
|
|
52
52
|
def actor_stopped
|
53
|
-
actor_stopped = Messages::ActorStopped.new
|
53
|
+
actor_stopped = Messages::ActorStopped.new(address, actor)
|
54
54
|
send.(actor_stopped, supervisor_address)
|
55
55
|
end
|
56
56
|
|
@@ -2,10 +2,10 @@ module Actor
|
|
2
2
|
class Supervisor
|
3
3
|
module Address
|
4
4
|
module Get
|
5
|
-
def self.call
|
5
|
+
def self.call(thread_group=nil)
|
6
6
|
thread_group ||= Thread.current.group
|
7
7
|
|
8
|
-
Registry.fetch
|
8
|
+
Registry.fetch(thread_group) do
|
9
9
|
Messaging::Address::None.instance
|
10
10
|
end
|
11
11
|
end
|
@@ -2,11 +2,11 @@ module Actor
|
|
2
2
|
class Supervisor
|
3
3
|
module Address
|
4
4
|
module Put
|
5
|
-
def self.call
|
5
|
+
def self.call(address=nil)
|
6
6
|
thread_group = Thread.current.group
|
7
7
|
|
8
8
|
if address.nil?
|
9
|
-
Registry.delete
|
9
|
+
Registry.delete(thread_group)
|
10
10
|
else
|
11
11
|
Registry[thread_group] = address
|
12
12
|
end
|
@@ -1,14 +1,14 @@
|
|
1
1
|
module Actor
|
2
2
|
class Supervisor
|
3
3
|
module Observer
|
4
|
-
def self.included
|
4
|
+
def self.included(cls)
|
5
5
|
cls.class_exec do
|
6
6
|
include Module::Handler
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
10
|
-
def update
|
11
|
-
handle
|
10
|
+
def update(message)
|
11
|
+
handle(message)
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
data/lib/actor/supervisor.rb
CHANGED
@@ -17,13 +17,13 @@ module Actor
|
|
17
17
|
@actor_count = 0
|
18
18
|
end
|
19
19
|
|
20
|
-
def self.build
|
20
|
+
def self.build(&assembly_block)
|
21
21
|
instance = new
|
22
22
|
instance.assembly_block = assembly_block
|
23
23
|
instance
|
24
24
|
end
|
25
25
|
|
26
|
-
def self.start
|
26
|
+
def self.start(&assembly_block)
|
27
27
|
Thread.report_on_exception = false
|
28
28
|
|
29
29
|
thread = Thread.new do
|
@@ -34,7 +34,7 @@ module Actor
|
|
34
34
|
loop do
|
35
35
|
ten_seconds = 10
|
36
36
|
|
37
|
-
result = thread.join
|
37
|
+
result = thread.join(ten_seconds)
|
38
38
|
|
39
39
|
break unless result.nil?
|
40
40
|
end
|
@@ -50,11 +50,11 @@ module Actor
|
|
50
50
|
self.publish = Messaging::Publish.build
|
51
51
|
end
|
52
52
|
|
53
|
-
def handle
|
53
|
+
def handle(message)
|
54
54
|
result = super
|
55
55
|
|
56
56
|
changed
|
57
|
-
notify_observers
|
57
|
+
notify_observers(message)
|
58
58
|
|
59
59
|
result
|
60
60
|
end
|
@@ -67,13 +67,13 @@ module Actor
|
|
67
67
|
return
|
68
68
|
end
|
69
69
|
|
70
|
-
publish.register
|
70
|
+
publish.register(actor_address)
|
71
71
|
|
72
72
|
self.actor_count += 1
|
73
73
|
end
|
74
74
|
|
75
75
|
handle Messages::ActorStopped do |message|
|
76
|
-
publish.unregister
|
76
|
+
publish.unregister(message.address)
|
77
77
|
|
78
78
|
self.actor_count -= 1
|
79
79
|
|
@@ -112,12 +112,12 @@ module Actor
|
|
112
112
|
super stop
|
113
113
|
end
|
114
114
|
|
115
|
-
def registered_actor?
|
116
|
-
publish.registered?
|
115
|
+
def registered_actor?(actor)
|
116
|
+
publish.registered?(actor.address)
|
117
117
|
end
|
118
118
|
|
119
|
-
def unregistered_actor?
|
120
|
-
publish.unregistered?
|
119
|
+
def unregistered_actor?(actor)
|
120
|
+
publish.unregistered?(actor.address)
|
121
121
|
end
|
122
122
|
|
123
123
|
def assembly_block
|
@@ -128,6 +128,6 @@ module Actor
|
|
128
128
|
@thread_group ||= ThreadGroup::Default
|
129
129
|
end
|
130
130
|
|
131
|
-
NoActorsStarted = Class.new
|
131
|
+
NoActorsStarted = Class.new(StandardError)
|
132
132
|
end
|
133
133
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ntl-actor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Ladd
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-11-
|
11
|
+
date: 2022-11-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: test_bench
|