79 lines
1.9 KiB
Crystal
79 lines
1.9 KiB
Crystal
require "option_parser"
|
|
require "../src/ipc.cr"
|
|
require "./colors"
|
|
|
|
verbosity = 1
|
|
service_name = "pong"
|
|
no_response = false
|
|
|
|
OptionParser.parse do |parser|
|
|
parser.on "-s service_name", "--service-name service_name", "URI" do |optsn|
|
|
service_name = optsn
|
|
end
|
|
|
|
parser.on "-n", "--no-response", "Do not provide any response back." do
|
|
no_response = true
|
|
end
|
|
|
|
parser.on "-v verbosity", "--verbosity verbosity", "Verbosity (0 = nothing is printed, 1 = only events, 2 = events and messages). Default: 1" do |optsn|
|
|
verbosity = optsn.to_i
|
|
end
|
|
|
|
parser.on "-h", "--help", "Show this help" do
|
|
puts parser
|
|
exit 0
|
|
end
|
|
end
|
|
|
|
service = IPC::Server.new (service_name)
|
|
service.base_timer = 5000 # 5 seconds
|
|
service.timer = 5000 # 5 seconds
|
|
|
|
service.loop do |event|
|
|
case event
|
|
when IPC::Event::Timer
|
|
if verbosity >= 1
|
|
puts "#{CORANGE}IPC::Event::Timer#{CRESET}"
|
|
end
|
|
when IPC::Event::Connection
|
|
if verbosity >= 1
|
|
puts "#{CBLUE}IPC::Event::Connection#{CRESET}, client: #{event.fd}"
|
|
end
|
|
when IPC::Event::Disconnection
|
|
if verbosity >= 1
|
|
puts "#{CBLUE}IPC::Event::Disconnection#{CRESET}, client: #{event.fd}"
|
|
end
|
|
when IPC::Event::MessageSent
|
|
begin
|
|
if verbosity >= 1
|
|
puts "#{CGREEN}IPC::Event::MessageSent#{CRESET}, client: #{event.fd}"
|
|
end
|
|
rescue e
|
|
puts "#{CRED}#{e.message}#{CRESET}"
|
|
service.remove_fd event.fd
|
|
end
|
|
when IPC::Event::MessageReceived
|
|
begin
|
|
if verbosity >= 1
|
|
puts "#{CGREEN}IPC::Event::MessageReceived#{CRESET}, client: #{event.fd}"
|
|
if verbosity >= 2
|
|
m = String.new event.message.payload
|
|
puts "#{CBLUE}message type #{event.message.utype}: #{m} #{CRESET}"
|
|
end
|
|
end
|
|
service.send event.message unless no_response
|
|
if verbosity >= 2 && ! no_response
|
|
puts "#{CBLUE}sending message...#{CRESET}"
|
|
end
|
|
|
|
rescue e
|
|
puts "#{CRED}#{e.message}#{CRESET}"
|
|
service.remove_fd event.fd
|
|
end
|
|
else
|
|
if verbosity >= 1
|
|
puts "#{CRED}Exception: message #{event} #{CRESET}"
|
|
end
|
|
end
|
|
end
|