Module: Concurrent::Postable

Included in:
Actor, Actor::Poolbox
Defined in:
lib/concurrent/actor.rb

Defined Under Namespace

Classes: Package

Instance Method Summary collapse

Instance Method Details

#<<(message) ⇒ Object



20
21
22
23
# File 'lib/concurrent/actor.rb', line 20

def <<(message)
  post(*message)
  return self
end

#forward(receiver, *message) ⇒ Object



51
52
53
54
55
# File 'lib/concurrent/actor.rb', line 51

def forward(receiver, *message)
  return false unless ready?
  queue.push(Package.new(message, receiver))
  return queue.length
end

#post(*message) ⇒ Object



14
15
16
17
18
# File 'lib/concurrent/actor.rb', line 14

def post(*message)
  return false unless ready?
  queue.push(Package.new(message))
  return queue.length
end

#post!(seconds, *message) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/concurrent/actor.rb', line 32

def post!(seconds, *message)
  raise Concurrent::Runnable::LifecycleError unless ready?
  raise Concurrent::TimeoutError if seconds.to_f <= 0.0
  event = Event.new
  cback = Queue.new
  queue.push(Package.new(message, cback, event))
  if event.wait(seconds)
    result = cback.pop
    if result.is_a?(Exception)
      raise result
    else
      return result
    end
  else
    event.set # attempt to cancel
    raise Concurrent::TimeoutError
  end
end

#post?(*message) ⇒ Boolean

Returns:

  • (Boolean)


25
26
27
28
29
30
# File 'lib/concurrent/actor.rb', line 25

def post?(*message)
  return nil unless ready?
  contract = Contract.new
  queue.push(Package.new(message, contract))
  return contract
end

#ready?Boolean

Returns:

  • (Boolean)


57
58
59
60
61
62
63
# File 'lib/concurrent/actor.rb', line 57

def ready?
  if self.respond_to?(:running?) && ! running?
    return false
  else
    return true
  end
end