File: file_queue.rb

package info (click to toggle)
stompserver 0.9.9gem-5
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 424 kB
  • sloc: ruby: 2,765; sh: 162; makefile: 3
file content (47 lines) | stat: -rw-r--r-- 1,310 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

module StompServer
class FileQueue < Queue

  def _close_queue(dest)
    Dir.delete(@queues[dest][:queue_dir]) if File.directory?(@queues[dest][:queue_dir])
  end

  def _open_queue(dest)
    # handle clashes between _ and /
    queue_name = dest.gsub('_','__')
    queue_name = dest.gsub('/','_')
    queue_dir = @directory + '/' + queue_name
    @queues[dest][:queue_dir] = queue_dir
    Dir.mkdir(queue_dir) unless File.directory?(queue_dir)
  end

  def _writeframe(dest,frame_todump,msgid)
    filename = "#{@queues[dest][:queue_dir]}/#{msgid}"
    frame = frame_todump.dup
    frame_body = frame.body
    frame.body = ''
    frame_image = Marshal.dump(frame)
    framelen = sprintf("%08x", frame_image.length)
    bodylen = sprintf("%08x", frame_body.length)
    File.open(filename,'wb') {|f| f.syswrite("#{framelen}#{bodylen}#{frame_image}#{frame_body}")}
    return true
  end

  def _readframe(dest,msgid)
    filename = "#{@queues[dest][:queue_dir]}/#{msgid}"
    file = nil
    File.open(filename,'rb') {|f| file = f.read}
    frame_len = file[0,8].hex
    body_len = file[8,8].hex
    frame = Marshal::load(file[16,frame_len])
    frame.body = file[(frame_len + 16),body_len]
    if File.delete(filename)
      result = frame
    else
      result = false
    end
    return result
  end
end
end