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