@@ -2,25 +2,26 @@ module Tribe
2
2
module Actable
3
3
include Workers ::Helpers
4
4
5
+ private
6
+
5
7
#
6
8
# Initialization method.
7
9
# Notes: Call this in your constructor.
8
10
#
9
11
10
- private
11
-
12
12
def init_actable ( options = { } )
13
13
# Symbols aren't GCed in JRuby so force string names.
14
14
if options [ :name ] && !options [ :name ] . is_a? ( String )
15
15
raise Tribe ::ActorNameError . new ( 'Name must be a string.' )
16
16
end
17
17
18
- @logger = Workers ::LogProxy . new ( options [ :logger ] )
19
18
@_actable = Tribe ::ActorState . new
19
+
20
20
@_actable . dedicated = options [ :dedicated ] || false
21
21
@_actable . pool = @_actable . dedicated ? Workers ::Pool . new ( :size => 1 ) : ( options [ :pool ] || Workers . pool )
22
22
@_actable . mailbox = Tribe ::Mailbox . new ( @_actable . pool )
23
23
@_actable . registry = options [ :registry ] || Tribe . registry
24
+ @_actable . logger = Workers ::LogProxy . new ( options [ :logger ] || Tribe . logger )
24
25
@_actable . scheduler = options [ :scheduler ] || Workers . scheduler
25
26
@_actable . name = options [ :name ]
26
27
@_actable . parent = options [ :parent ]
@@ -47,38 +48,21 @@ def deliver_event!(event)
47
48
process_events
48
49
end
49
50
50
- return nil
51
+ nil
51
52
end
52
53
53
54
def direct_message! ( command , data = nil , src = nil )
54
55
deliver_event! ( Tribe ::Event . new ( command , data , src ) )
55
56
56
- return nil
57
- end
58
-
59
- def message! ( dest , command , data = nil )
60
- event = Tribe ::Event . new ( command , data , self )
61
-
62
- dest . deliver_event! ( event )
63
-
64
- return nil
65
- end
66
-
67
- def future! ( dest , command , data = nil )
68
- event = Tribe ::Event . new ( command , data , self )
69
- event . future = future = Tribe ::Future . new ( self )
70
-
71
- dest . deliver_event! ( event )
72
-
73
- return future
57
+ nil
74
58
end
75
59
76
60
def shutdown!
77
- return direct_message! ( :__shutdown__ )
61
+ direct_message! ( :__shutdown__ )
78
62
end
79
63
80
64
def perform! ( &block )
81
- return direct_message! ( :__perform__ , block )
65
+ direct_message! ( :__perform__ , block )
82
66
end
83
67
84
68
def spawn! ( klass , actor_options = { } , spawn_options = { } )
@@ -102,7 +86,7 @@ def spawn!(klass, actor_options = {}, spawn_options = {})
102
86
@_actable . supervisees . add ( child )
103
87
end
104
88
105
- return child
89
+ child
106
90
end
107
91
108
92
def alive?
@@ -114,23 +98,27 @@ def dead?
114
98
end
115
99
116
100
def name
117
- return @_actable . name
101
+ @_actable . name
118
102
end
119
103
120
104
def identifier
121
- return @_actable . name ? "#{ object_id } :#{ @_actable . name } " : object_id
105
+ @_actable . name ? "#{ object_id } :#{ @_actable . name } " : object_id
122
106
end
123
107
124
108
def exception
125
- return @_actable . exception
109
+ @_actable . exception
126
110
end
127
111
128
112
def registry
129
- return @_actable . registry
113
+ @_actable . registry
130
114
end
131
115
132
116
def pool
133
- return @_actable . pool
117
+ @_actable . pool
118
+ end
119
+
120
+ def logger
121
+ @_actable . logger
134
122
end
135
123
136
124
#
@@ -179,7 +167,7 @@ def process_events
179
167
process_events
180
168
end
181
169
182
- return nil
170
+ nil
183
171
end
184
172
185
173
def event_handler ( event )
@@ -220,7 +208,7 @@ def custom_event_handler(event)
220
208
@_actable . active_event = nil
221
209
end
222
210
223
- return nil
211
+ nil
224
212
end
225
213
226
214
def initialize_handler ( event )
@@ -236,9 +224,14 @@ def exception_handler(exception)
236
224
@_actable . children . clear
237
225
@_actable . supervisees . clear
238
226
227
+ log_exception_handler ( exception )
239
228
on_exception ( Event . new ( :exception , { :exception => exception } ) )
240
229
241
- return nil
230
+ nil
231
+ end
232
+
233
+ def log_exception_handler ( exception )
234
+ logger . error ( "EXCEPTION: #{ exception . message } \n #{ exception . backtrace . join ( "\n " ) } \n --" )
242
235
end
243
236
244
237
def shutdown_handler ( event )
@@ -252,13 +245,13 @@ def shutdown_handler(event)
252
245
253
246
on_shutdown ( Event . new ( :shutdown , { } ) )
254
247
255
- return nil
248
+ nil
256
249
end
257
250
258
251
def perform_handler ( event )
259
252
event . data . call
260
253
261
- return nil
254
+ nil
262
255
end
263
256
264
257
def cleanup_handler ( exception = nil )
@@ -268,7 +261,7 @@ def cleanup_handler(exception = nil)
268
261
@_actable . registry . unregister ( self )
269
262
@_actable . timers . each { |t | t . cancel } if @_actable . timers
270
263
271
- return nil
264
+ nil
272
265
end
273
266
274
267
def child_died_handler ( child , exception )
@@ -281,7 +274,7 @@ def child_died_handler(child, exception)
281
274
raise Tribe ::ActorChildDied . new ( "#{ child . identifier } died." )
282
275
end
283
276
284
- return nil
277
+ nil
285
278
end
286
279
287
280
def child_shutdown_handler ( child )
@@ -290,14 +283,14 @@ def child_shutdown_handler(child)
290
283
291
284
on_child_shutdown ( Event . new ( :child_shutdown , { :child => child } ) )
292
285
293
- return nil
286
+ nil
294
287
end
295
288
296
289
def parent_died_handler ( parent , exception )
297
290
on_parent_died ( Event . new ( :parent_died , { :parent => parent , :exception => exception } ) )
298
291
raise Tribe ::ActorParentDied . new ( "#{ parent . identifier } died." )
299
292
300
- return nil
293
+ nil
301
294
end
302
295
303
296
#
@@ -307,6 +300,23 @@ def parent_died_handler(parent, exception)
307
300
308
301
private
309
302
303
+ def message! ( dest , command , data = nil )
304
+ event = Tribe ::Event . new ( command , data , self )
305
+
306
+ dest . deliver_event! ( event )
307
+
308
+ nil
309
+ end
310
+
311
+ def future! ( dest , command , data = nil )
312
+ event = Tribe ::Event . new ( command , data , self )
313
+ event . future = future = Tribe ::Future . new ( self )
314
+
315
+ dest . deliver_event! ( event )
316
+
317
+ future
318
+ end
319
+
310
320
def timer! ( delay , command , data = nil )
311
321
timer = Workers ::Timer . new ( delay , :scheduler => @_actable . scheduler ) do
312
322
@_actable . timers . delete ( timer )
@@ -315,7 +325,7 @@ def timer!(delay, command, data = nil)
315
325
316
326
@_actable . timers . add ( timer )
317
327
318
- return timer
328
+ timer
319
329
end
320
330
321
331
def periodic_timer! ( delay , command , data = nil )
@@ -329,19 +339,19 @@ def periodic_timer!(delay, command, data = nil)
329
339
330
340
@_actable . timers . add ( timer )
331
341
332
- return timer
342
+ timer
333
343
end
334
344
335
345
def forward! ( dest )
336
346
dest . deliver_event! ( @_actable . active_event )
337
347
@_actable . active_event = nil
338
348
339
- return nil
349
+ nil
340
350
end
341
351
342
352
# Wrap blocking code using this method to automatically expand/contract the pool.
343
- # This way you avoid potential deadlock with blocking code.
344
- # Not needed for dedicated actors since they already have their own thread.
353
+ # This way you avoid potential thread starvation. Not needed for dedicated actors
354
+ # since they already have their own thread.
345
355
def blocking!
346
356
if @_actable . dedicated
347
357
yield
0 commit comments