module Tkar::MessageStream

Public Class Methods

for(argv, opts = {}) click to toggle source

Get a bidirectional stream for sending and receiving Tkar protocol messages in either binary or ascii format.

   # File lib/tkar/stream.rb
 8 def self.for(argv, opts = {})
 9   binary, client = opts["b"], opts["c"]
10   (binary ? Binary : Ascii).new(opts, *get_fds(argv, client))
11 end
get_fds(argv, client) click to toggle source
   # File lib/tkar/stream.rb
13 def self.get_fds argv, client
14   case argv.size
15   when 0
16     [$stdin, $stdout]
17   when 1
18     case argv[0]
19     when /^\d+$/
20       if client
21         [TCPSocket.new("127.0.0.1", Integer(argv[0]))]
22       else
23         server = TCPServer.new("127.0.0.1", Integer(argv[0]))
24         flag = Socket.do_not_reverse_lookup
25         Socket.do_not_reverse_lookup = false
26         port = server.addr[1]
27         Socket.do_not_reverse_lookup = flag
28         puts "listening on port #{port}"
29         [server.accept]
30       end
31     else
32       if client
33         [UNIXSocket.new(argv[0])]
34       else
35         [UNIXServer.new(argv[0]).accept]
36       end
37     end
38   when 2
39     case argv[1]
40     when /^\d+$/
41       if client
42         [TCPSocket.new(argv[0], Integer(argv[1]))]
43       else
44         [TCPServer.new(argv[0], Integer(argv[1])).accept]
45       end
46     else
47       raise "Bad arguments--second arg must be port: #{argv.inspect}"
48     end
49   else
50     raise "Too many arguments: #{argv.inspect}"
51   end
52 end