1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
module Concurrent
module Actor
class Envelope
include TypeCheck
# @!attribute [r] message
# @return [Object] a message
# @!attribute [r] future
# @return [Edge::Future] a future which becomes resolved after message is processed
# @!attribute [r] sender
# @return [Reference, Thread] an actor or thread sending the message
# @!attribute [r] address
# @return [Reference] where this message will be delivered
attr_reader :message, :future, :sender, :address
def initialize(message, future, sender, address)
@message = message
@future = Type! future, Promises::ResolvableFuture, NilClass
@sender = Type! sender, Reference, Thread
@address = Type! address, Reference
end
def sender_path
if sender.is_a? Reference
sender.path
else
sender.to_s
end
end
def address_path
address.path
end
def reject!(error)
future.reject error unless future.nil?
end
end
end
end
|