Module: Tra::Mailbox

Defined in:
lib/tra/mailbox.rb

Class Method Summary collapse

Class Method Details

.receiveObject



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/tra/mailbox.rb', line 4

def receive
  Dir.mkdir DIRECTORY unless Dir.exist? DIRECTORY
  file = FILE[Process.pid]

  Thread.new do
    Socket.unix_server_loop file do |socket|
      message = Marshal.load socket.read size_of_message_from socket
      patterns = PATTERNS.select { |pattern, _| pattern === message }

      if patterns.empty?
        QUEUE << message
      else
        Thread.new do
          patterns.each do |_, action|
            Thread.new { action.call message }
          end
        end
      end
    end
  end

  sleep 0.01 until File.exist? file
end