@@ -119,10 +119,16 @@ def initialize(parent, name, actress_class, *args, &block)
119
119
@terminated = Event . new
120
120
@mutex = Mutex . new
121
121
122
- @actress_class = Child! actress_class , Abstract
122
+ @actress_class = Child! actress_class , ActorContext
123
123
schedule_execution do
124
124
parent_core . add_child reference if parent_core
125
- @actress = actress_class . new self , *args , &block # FIXME it may fail
125
+ begin
126
+ @actress = actress_class . new *args , &block
127
+ @actress . send :initialize_core , self
128
+ rescue => ex
129
+ puts "#{ ex } (#{ ex . class } )\n #{ ex . backtrace . join ( "\n " ) } "
130
+ terminate! # TODO test that this is ok
131
+ end
126
132
end
127
133
end
128
134
@@ -156,6 +162,7 @@ def terminate!
156
162
guard!
157
163
@terminated . set
158
164
parent_core . remove_child reference if parent_core
165
+ # TODO terminate all children
159
166
end
160
167
161
168
def guard!
@@ -227,21 +234,14 @@ def reject_envelope(envelope)
227
234
end
228
235
end
229
236
230
- class Abstract
237
+ module ActorContext
231
238
include Algebrick ::TypeCheck
232
239
extend Algebrick ::TypeCheck
233
240
include Algebrick ::Matching
234
241
include CoreDelegations
235
242
236
243
attr_reader :core
237
244
238
- def self . new ( core , *args , &block )
239
- allocate . tap do |actress |
240
- actress . __send__ :pre_initialize , core
241
- actress . __send__ :initialize , *args , &block
242
- end
243
- end
244
-
245
245
def on_message ( message )
246
246
raise NotImplementedError
247
247
end
@@ -271,7 +271,7 @@ def terminate!
271
271
272
272
private
273
273
274
- def pre_initialize ( core )
274
+ def initialize_core ( core )
275
275
@core = Type! core , Core
276
276
end
277
277
@@ -280,7 +280,8 @@ def envelope
280
280
end
281
281
end
282
282
283
- class Root < Abstract
283
+ class Root
284
+ include ActorContext
284
285
def on_message ( message )
285
286
# ignore
286
287
end
0 commit comments