pb_actor 0.0.2 → 0.0.3
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/pb_actor/async_proxy.rb +9 -0
- data/lib/pb_actor/basic_proxy.rb +27 -0
- data/lib/pb_actor/future.rb +21 -0
- data/lib/pb_actor/future_proxy.rb +13 -0
- data/lib/pb_actor/message.rb +15 -0
- data/lib/pb_actor/proxy.rb +6 -86
- data/lib/pb_actor/version.rb +1 -1
- data/lib/pb_actor.rb +3 -3
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d0cf1ea9d8a2f2a20ad8f90ef852e74182c42ca
|
4
|
+
data.tar.gz: 8077c6562b7ff8c7f1cc60aea93884f907415dfb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a812dc4a3616d5cbd13fb03ebafc5dba50b9cacd2611ecda4a95cecf61c43363895182af8453cfbc0aff01140432aa1bf8b5e6381e7bfb36e229aa146f3b7c9e
|
7
|
+
data.tar.gz: 2fe7ccd11918ed2f751130e3f957dd89dc08cd377fff7d86e5c8a8a2c3671aa4a5e35d2106edbd513fe838acd8e81a35d7075d0acce8515a50c895c5e42227c4
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'timeout'
|
2
|
+
|
3
|
+
module PbActor
|
4
|
+
class BasicProxy
|
5
|
+
def initialize origin, pid, wr, rd
|
6
|
+
@origin, @pid, @wr, @rd = origin, pid, wr, rd
|
7
|
+
end
|
8
|
+
|
9
|
+
def alive?
|
10
|
+
# Have any other way to check a process status?
|
11
|
+
!timeout(0.001){@rd.eof?}
|
12
|
+
rescue Timeout::Error => e
|
13
|
+
true
|
14
|
+
end
|
15
|
+
|
16
|
+
def method_missing method, *args, &blk
|
17
|
+
raise ArgumentError, 'actor not support block' if blk
|
18
|
+
raise DeadActorError, 'dead actor call' unless alive?
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_s
|
22
|
+
"#{self.class}(#{@origin.class})"
|
23
|
+
end
|
24
|
+
|
25
|
+
undef send, public_send
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module PbActor
|
2
|
+
class Future
|
3
|
+
def initialize id, wr, rd
|
4
|
+
@id = id
|
5
|
+
@wr= wr
|
6
|
+
@rd = rd
|
7
|
+
end
|
8
|
+
|
9
|
+
def value
|
10
|
+
loop do
|
11
|
+
Message.send [:future_value_get, @id], @wr
|
12
|
+
type, value = Message.recv @rd
|
13
|
+
if type == :future_value
|
14
|
+
break value
|
15
|
+
else
|
16
|
+
sleep 0.01
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'pb_actor/future'
|
2
|
+
require 'securerandom'
|
3
|
+
|
4
|
+
module PbActor
|
5
|
+
class FutureProxy < BasicProxy
|
6
|
+
def method_missing method, *args, &blk
|
7
|
+
super
|
8
|
+
id = SecureRandom.uuid
|
9
|
+
Message.send [:future_method_call, id, method, *args], @wr
|
10
|
+
Future.new id, @wr, @rd
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/pb_actor/proxy.rb
CHANGED
@@ -1,52 +1,9 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
1
|
+
require 'pb_actor/message'
|
2
|
+
require 'pb_actor/basic_proxy'
|
3
|
+
require 'pb_actor/async_proxy'
|
4
|
+
require 'pb_actor/future_proxy'
|
3
5
|
|
4
6
|
module PbActor
|
5
|
-
class DeadActorError < StandardError
|
6
|
-
end
|
7
|
-
|
8
|
-
module Message
|
9
|
-
class << self
|
10
|
-
def send msg, wr
|
11
|
-
Marshal.dump(msg, wr)
|
12
|
-
rescue Errno::EPIPE => e
|
13
|
-
raise DeadActorError, 'dead actor call'
|
14
|
-
end
|
15
|
-
|
16
|
-
def recv rd
|
17
|
-
Marshal.load rd
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
class BasicProxy
|
23
|
-
def initialize origin, pid, wr, rd
|
24
|
-
@origin, @pid, @wr, @rd = origin, pid, wr, rd
|
25
|
-
end
|
26
|
-
|
27
|
-
def alive?
|
28
|
-
begin
|
29
|
-
# Have any other way to check a process status?
|
30
|
-
timeout(0.001){Process.wait}
|
31
|
-
rescue Timeout::Error => e
|
32
|
-
end
|
33
|
-
Process.kill(0, @pid) == 1
|
34
|
-
rescue Errno::ESRCH, Errno::ECHILD => e
|
35
|
-
false
|
36
|
-
end
|
37
|
-
|
38
|
-
def method_missing method, *args, &blk
|
39
|
-
raise ArgumentError, 'actor not support block' if blk
|
40
|
-
raise DeadActorError, 'dead actor call' unless alive?
|
41
|
-
end
|
42
|
-
|
43
|
-
def to_s
|
44
|
-
"#{self.class}(#{@origin.class})"
|
45
|
-
end
|
46
|
-
|
47
|
-
undef send, public_send
|
48
|
-
end
|
49
|
-
|
50
7
|
class Proxy < BasicProxy
|
51
8
|
def initialize origin
|
52
9
|
@origin = origin
|
@@ -90,11 +47,11 @@ module PbActor
|
|
90
47
|
end
|
91
48
|
|
92
49
|
def async
|
93
|
-
AsyncProxy.new @origin, @pid, @wr, @rd
|
50
|
+
@async ||= AsyncProxy.new @origin, @pid, @wr, @rd
|
94
51
|
end
|
95
52
|
|
96
53
|
def future
|
97
|
-
FutureProxy.new @origin, @pid, @wr, @rd
|
54
|
+
@future ||= FutureProxy.new @origin, @pid, @wr, @rd
|
98
55
|
end
|
99
56
|
|
100
57
|
def terminate
|
@@ -109,41 +66,4 @@ module PbActor
|
|
109
66
|
nil
|
110
67
|
end
|
111
68
|
end
|
112
|
-
|
113
|
-
class AsyncProxy < BasicProxy
|
114
|
-
def method_missing method, *args, &blk
|
115
|
-
super
|
116
|
-
Message.send [:async_method_call, nil, method, *args], @wr
|
117
|
-
nil
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
class FutureProxy < BasicProxy
|
122
|
-
def method_missing method, *args, &blk
|
123
|
-
super
|
124
|
-
id = SecureRandom.uuid
|
125
|
-
Message.send [:future_method_call, id, method, *args], @wr
|
126
|
-
Future.new id, @wr, @rd
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
class Future
|
131
|
-
def initialize id, wr, rd
|
132
|
-
@id = id
|
133
|
-
@wr= wr
|
134
|
-
@rd = rd
|
135
|
-
end
|
136
|
-
|
137
|
-
def value
|
138
|
-
loop do
|
139
|
-
Message.send [:future_value_get, @id], @wr
|
140
|
-
type, value = Message.recv @rd
|
141
|
-
if type == :future_value
|
142
|
-
break value
|
143
|
-
else
|
144
|
-
sleep 0.01
|
145
|
-
end
|
146
|
-
end
|
147
|
-
end
|
148
|
-
end
|
149
69
|
end
|
data/lib/pb_actor/version.rb
CHANGED
data/lib/pb_actor.rb
CHANGED
@@ -1,11 +1,9 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
require "pb_actor/version"
|
3
|
-
require "pb_actor/proxy"
|
4
3
|
|
5
4
|
module PbActor
|
6
5
|
class << self
|
7
6
|
def included base
|
8
|
-
base.send :include, InstanceMethods
|
9
7
|
base.send :extend, ClassMethods
|
10
8
|
end
|
11
9
|
end
|
@@ -19,6 +17,8 @@ module PbActor
|
|
19
17
|
end
|
20
18
|
end
|
21
19
|
|
22
|
-
|
20
|
+
class DeadActorError < StandardError
|
23
21
|
end
|
24
22
|
end
|
23
|
+
|
24
|
+
require "pb_actor/proxy"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pb_actor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jjy
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-08-
|
11
|
+
date: 2013-08-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -51,6 +51,11 @@ files:
|
|
51
51
|
- README.md
|
52
52
|
- Rakefile
|
53
53
|
- lib/pb_actor.rb
|
54
|
+
- lib/pb_actor/async_proxy.rb
|
55
|
+
- lib/pb_actor/basic_proxy.rb
|
56
|
+
- lib/pb_actor/future.rb
|
57
|
+
- lib/pb_actor/future_proxy.rb
|
58
|
+
- lib/pb_actor/message.rb
|
54
59
|
- lib/pb_actor/proxy.rb
|
55
60
|
- lib/pb_actor/version.rb
|
56
61
|
- pb_actor.gemspec
|
@@ -76,7 +81,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
76
81
|
version: '0'
|
77
82
|
requirements: []
|
78
83
|
rubyforge_project:
|
79
|
-
rubygems_version: 2.0.
|
84
|
+
rubygems_version: 2.0.3
|
80
85
|
signing_key:
|
81
86
|
specification_version: 4
|
82
87
|
summary: Just for fun.
|