class MessageChannel::Druby::Agent

Public Class Methods

new( host: @@host, port: @@port ) click to toggle source
# File lib/message_channel/druby.rb, line 64
def initialize( host: @@host, port: @@port )
  @@host  =  host
  @@port  =  port
  @uri  =  "druby://#{host}:#{port}"
 
  if  !defined?( @@Broker )  ||  @@Broker.nil?
    @@Broker  =  Broker.new
    DRb.start_service( @uri, @@Broker )    rescue nil
  end
 
  @drb  =  DRbObject.new_with_uri( @uri )
  @queue_ids  =  {}
end

Public Instance Methods

listen_each( pattern, &block ) click to toggle source
# File lib/message_channel/druby.rb, line 82
def listen_each( pattern, &block )
  queue_id  =  @drb.subscribe( pattern )
  @queue_ids[pattern]  =  queue_id
  while  true
    topic, message  =  * @drb.wait( queue_id )
    break    if  topic.nil?
    block.call( topic, message )
  end
rescue => error
  nil
ensure
  @drb.unsubscribe( queue_id )
  @queue_ids.delete( pattern )    rescue  nil
end
listen_once( pattern ) click to toggle source
# File lib/message_channel/druby.rb, line 78
def listen_once( pattern )
  topic, message  =  * @drb.fetch( pattern )
end
notify( topic, message ) click to toggle source
# File lib/message_channel/druby.rb, line 104
def notify( topic, message )
  @drb.publish( topic, message )
end
unlisten( pattern ) click to toggle source
# File lib/message_channel/druby.rb, line 97
def unlisten( pattern )
  if ( queue_id  =  @queue_ids[pattern] )
    @drb.unsubscribe( queue_id )
    @queue_ids.delete( pattern )    rescue  nil
  end
end