Sha256: cebcf31f52424d1211ec56acc78d25248ac8f32b70bbc86c172d886c4923b498

Contents?: true

Size: 771 Bytes

Versions: 1

Compression:

Stored size: 771 Bytes

Contents

require 'SysVIPC'

class Localjob
  class Channel
    def shift
      raise "SysV adapter does not support multiple queues" if @queues.size > 1
      @queues.first.shift
    end
  end

  class SysvAdapter
    include SysVIPC
    attr_reader :mqueue

    def initialize(name)
      @filename = "/tmp/#{name}"
      File.open(@filename, "w") { }
      key = ftok(@filename, 0)

      @mq = MessageQueue.new(key, IPC_CREAT | 0600)
    end

    def receive
      @mq.receive(0, 8024)
    end

    def send(message)
      @mq.send(1, message)
    end

    def size
      @mq.ipc_stat.msg_qnum
    end

    def destroy
      File.delete(@filename)
      @mq.rm
    end

    private
    def fix_queue_name(name)
      name.start_with?('/') ? name : "/#{name}"
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
localjob-0.1.0 lib/localjob/sysv_adapter.rb