Module: Actor::Module::SuspendResume

Defined in:
lib/actor/module/suspend_resume.rb,
lib/actor/module/suspend_resume/handle.rb,
lib/actor/module/suspend_resume/controls.rb,
lib/actor/module/suspend_resume/configure.rb,
lib/actor/module/suspend_resume/initialize.rb

Defined Under Namespace

Modules: Configure, Controls, Handle, Initialize

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#suspend_queueObject



48
49
50
# File 'lib/actor/module/suspend_resume.rb', line 48

def suspend_queue
  @suspend_queue ||= Messaging::Queue::Substitute.build
end

#suspendedObject

Returns the value of attribute suspended.



12
13
14
# File 'lib/actor/module/suspend_resume.rb', line 12

def suspended
  @suspended
end

Class Method Details

.included(cls) ⇒ Object



4
5
6
7
8
9
10
# File 'lib/actor/module/suspend_resume.rb', line 4

def self.included(cls)
  cls.class_exec do
    prepend Configure
    prepend Handle
    prepend Initialize
  end
end

Instance Method Details

#handle_resumeObject



19
20
21
22
23
24
25
26
27
# File 'lib/actor/module/suspend_resume.rb', line 19

def handle_resume
  self.suspended = false

  until suspend_queue.empty?
    deferred_message = suspend_queue.deq

    send.(deferred_message, address)
  end
end

#handle_suspendObject



15
16
17
# File 'lib/actor/module/suspend_resume.rb', line 15

def handle_suspend
  self.suspended = true
end

#message_deferred?(message = nil, wait: nil) ⇒ Boolean

Returns:

  • (Boolean)


29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/actor/module/suspend_resume.rb', line 29

def message_deferred?(message=nil, wait: nil)
  non_block = wait == false

  begin
    msg = suspend_queue.deq(true)
  rescue ThreadError
  end

  if message.nil?
    msg ? true : false
  else
    msg == message
  end
end

#suspended?Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/actor/module/suspend_resume.rb', line 44

def suspended?
  @suspended == true
end