Module: Actor

Included in:
Controls::Actor::Example
Defined in:
lib/actor/controls/statistics/elapsed_time/standard_deviation.rb,
lib/actor/actor.rb,
lib/actor/queue.rb,
lib/actor/message.rb,
lib/actor/time_unit.rb,
lib/actor/statistics.rb,
lib/actor/supervisor.rb,
lib/actor/queue/reader.rb,
lib/actor/controls/time.rb,
lib/actor/controls/actor.rb,
lib/actor/statistics/copy.rb,
lib/actor/controls/message.rb,
lib/actor/messaging/reader.rb,
lib/actor/messaging/writer.rb,
lib/actor/queue/assertions.rb,
lib/actor/statistics/timer.rb,
lib/actor/messaging/address.rb,
lib/actor/controls/statistics.rb,
lib/actor/controls/time/clock.rb,
lib/actor/controls/statistics/timer.rb,
lib/actor/messaging/reader/substitute.rb,
lib/actor/messaging/writer/substitute.rb,
lib/actor/controls/statistics/elapsed_time.rb,
lib/actor/test_fixtures/parallel_iteration.rb,
lib/actor/test_fixtures/sample_actor_status.rb,
lib/actor/controls/statistics/elapsed_time/average.rb,
lib/actor/controls/statistics/elapsed_time/maximum.rb,
lib/actor/controls/statistics/elapsed_time/minimum.rb

Overview

Defined Under Namespace

Modules: Controls, Destructure, Message, Messaging, Spawn, Start, State, TestFixtures, TimeUnit, UpdateStatistics Classes: Queue, Statistics, Supervisor

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#actor_addressObject

Returns the value of attribute actor_address.



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

def actor_address
  @actor_address
end

#actor_stateObject

Returns the value of attribute actor_state.



13
14
15
# File 'lib/actor/actor.rb', line 13

def actor_state
  @actor_state
end

#readerObject



50
51
52
# File 'lib/actor/actor.rb', line 50

def reader
  @reader ||= Reader::Substitute.new
end

Class Method Details

.included(cls) ⇒ Object



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

def self.included cls
  cls.class_exec do
    extend Destructure
    extend Spawn
    extend Start

    prepend UpdateStatistics
  end
end

Instance Method Details

#actionObject



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

def action
end

#actor_statisticsObject



19
20
21
# File 'lib/actor/actor.rb', line 19

def actor_statistics
  @actor_statistics ||= Statistics.new
end

#handle(_) ⇒ Object



23
24
# File 'lib/actor/actor.rb', line 23

def handle _
end

#handle_system_message(message) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/actor/actor.rb', line 26

def handle_system_message message
  case message
  when Message::Pause then
    self.actor_state = State::Paused

  when Message::Resume then
    self.actor_state = State::Running

  when Message::Stop then
    self.actor_state = State::Running
    raise StopIteration

  when Message::RecordStatus then
    status = message.status

    Statistics::Copy.(status, actor_statistics)

    status.state = actor_state
    status.actor_class = self.class.name

    Messaging::Writer.(status, message.reply_address)
  end
end

#run_loopObject



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/actor/actor.rb', line 54

def run_loop
  loop do
    while message = reader.(wait: actor_state == State::Paused)
      handle message

      if message.is_a? Message
        handle_system_message message
      end
    end

    action if actor_state == State::Running

    Thread.pass
  end

  self.actor_state = State::Stopped

rescue => error
  self.actor_state = State::Crashed
  raise error
end