1#!/usr/bin/env ruby 2 3require 'rubygems' 4require 'bundler/setup' 5require 'json' 6require 'zero_mq' 7require './unittest' 8 9h = Handler.new() 10f = File.open "/tmp/remotebackend.txt.#{$$}","a" 11f.sync = true 12 13runcond=true 14 15trap('INT') { runcond = false } 16trap('TERM') { runcond = false } 17 18begin 19 context = ZeroMQ::Context.new 20 socket = context.socket ZMQ::REP 21 socket.bind("ipc:///tmp/remotebackend.0") 22 23 print "[#{Time.now.to_s}] ZeroMQ unit test responder running\n" 24 25 while(runcond) do 26 line = "" 27 rc = socket.recv_string line 28 # expect json 29 input = {} 30 line = line.strip 31 32 f.puts "#{Time.now.to_f}: [zmq] #{line}" 33 next if line.empty? 34 begin 35 input = JSON.parse(line) 36 method = "do_#{input["method"].downcase}" 37 args = input["parameters"] || [] 38 39 if h.respond_to?(method.to_sym) == false 40 res = false 41 elsif args.size > 0 42 res, log = h.send(method,args) 43 else 44 res, log = h.send(method) 45 end 46 socket.send_string ({:result => res, :log => log}).to_json + "\n" , 0 47 f.puts "#{Time.now.to_f} [zmq]: #{({:result => res, :log => log}).to_json}" 48 rescue JSON::ParserError 49 socket.send_string ({:result => false, :log => "Cannot parse input #{line}"}).to_json + "\n"; 50 f.puts "#{Time.now.to_f} [zmq]: #{({:result => false, :log => "Cannot parse input #{line}"}).to_json}" 51 next 52 end 53 end 54rescue SystemExit, Interrupt, Errno::EINTR 55end 56 57print "[#{Time.now.to_s}] ZeroMQ unit test responder ended\n" 58