Class: Dynflow::Connectors::Direct::Core
  
  
  
  
  
    - Inherits:
 
    - 
      Actor
      
        
          - Object
 
          
            - Concurrent::Actor::Context
 
          
            - Actor
 
          
            - Dynflow::Connectors::Direct::Core
 
          
        
        show all
      
     
  
  
  
  
  
  
  
  
  
  
    - Defined in:
 
    - lib/dynflow/connectors/direct.rb
 
  
  
 
  
    
      Instance Method Summary
      collapse
    
    
  
  
  
  
  
  
  
  
  
  Methods inherited from Actor
  #behaviour_definition, #finish_termination, #start_termination, #terminating?
  
  
  
  
  
  
  
  
  
  
  #on_message
  
  
  
  
  
  
  
  
  
  #log
  
  Constructor Details
  
    
  
  
    #initialize(connector)  ⇒ Core 
  
  
  
  
    
Returns a new instance of Core.
   
 
  
  
    
      
7
8
9
10
11 
     | 
    
      # File 'lib/dynflow/connectors/direct.rb', line 7
def initialize(connector)
  @connector = connector
  @worlds = {}
  @executor_round_robin = RoundRobin.new
end
     | 
  
 
  
 
  
    Instance Method Details
    
      
  
  
    #handle_envelope(envelope)  ⇒ Object 
  
  
  
  
    
      
28
29
30
31
32
33
34 
     | 
    
      # File 'lib/dynflow/connectors/direct.rb', line 28
def handle_envelope(envelope)
  if world = find_receiver(envelope)
    @connector.receive(world, envelope)
  else
    log(Logger::ERROR, "Receiver for envelope #{envelope} not found")
  end
end
     | 
  
 
    
      
  
  
    #start_listening(world)  ⇒ Object 
  
  
  
  
    
      
13
14
15
16 
     | 
    
      # File 'lib/dynflow/connectors/direct.rb', line 13
def start_listening(world)
  @worlds[world.id] = world
  @executor_round_robin.add(world) if world.executor
end 
     | 
  
 
    
      
  
  
    #stop_listening(world)  ⇒ Object 
  
  
  
  
    
      
22
23
24
25
26 
     | 
    
      # File 'lib/dynflow/connectors/direct.rb', line 22
def stop_listening(world)
  @worlds.delete(world.id)
  @executor_round_robin.delete(world) if world.executor
  reference.tell(:terminate!) if @worlds.empty?
end 
     | 
  
 
    
      
  
  
    #stop_receiving_new_work(world)  ⇒ Object 
  
  
  
  
    
      
18
19
20 
     | 
    
      # File 'lib/dynflow/connectors/direct.rb', line 18
def stop_receiving_new_work(world)
  @executor_round_robin.delete(world)
end 
     |