class Uc::Mqueue

Attributes

max_msg[R]
msg_size[R]
name[R]

Public Class Methods

new(name, max_msg: 15, msg_size: 70) click to toggle source
# File lib/uc/mqueue.rb, line 7
def initialize(name, max_msg: 15, msg_size: 70)
  @name = name
  @max_msg = max_msg
  @msg_size = msg_size
end

Public Instance Methods

attr() click to toggle source
# File lib/uc/mqueue.rb, line 28
def attr
  ::POSIX_MQ::Attr.new(0,max_msg,msg_size)
end
clear() click to toggle source
# File lib/uc/mqueue.rb, line 79
def clear
  nb_reader do |mq|
    loop { mq.receive }
  end
rescue Errno::EAGAIN
  return
end
create() click to toggle source
# File lib/uc/mqueue.rb, line 13
def create
  ::POSIX_MQ.new("/#{name}", :rw, 0700, attr)
end
destroy() click to toggle source
# File lib/uc/mqueue.rb, line 22
def destroy
  ::POSIX_MQ.unlink("/#{name}")
rescue
  return false
end
nb_reader(&block) click to toggle source
# File lib/uc/mqueue.rb, line 48
def nb_reader(&block)
  new_mq(:r, true, &block)
end
nb_writer(&block) click to toggle source
# File lib/uc/mqueue.rb, line 56
def nb_writer(&block)
  new_mq(IO::WRONLY, true, &block)
end
new_mq(io_mode, nonblock) { |mq| ... } click to toggle source
# File lib/uc/mqueue.rb, line 32
def new_mq(io_mode, nonblock, &block)
  mq = ::POSIX_MQ.new("/#{name}", io_mode)
  mq.nonblock = true if nonblock
  return mq if not block_given?
   
  begin
      yield mq
  ensure
      mq.close if mq
  end
end
reader(&block) click to toggle source
# File lib/uc/mqueue.rb, line 44
def reader(&block)
  new_mq(:r, false, &block)
end
recreate() click to toggle source
# File lib/uc/mqueue.rb, line 17
def recreate
  destroy
  create
end
wait(event, timeout, output: false) click to toggle source
# File lib/uc/mqueue.rb, line 60
def wait(event, timeout, output: false)
  event = event.to_s
  message = ""
  reader do |r|
    while message != event do
      r.receive(message, timeout)
      puts "> #{message}" if output
    end
  end
  return message
end
watch(event, timeout: 30, recreate: true) { || ... } click to toggle source
# File lib/uc/mqueue.rb, line 72
def watch(event, timeout: 30, recreate: true, &block)
  self.recreate if recreate 
  clear
  yield
  wait(event, timeout, output: true)
end
writer(&block) click to toggle source
# File lib/uc/mqueue.rb, line 52
def writer(&block)
  new_mq(IO::WRONLY, false, &block)
end