Eu precisava ver que serviço estava enviando no hospital em que trabalho. Este pequeno trecho de código configura um servidor tcp e escuta as conexões de entrada. Ao receber uma mensagem HL7, ele envia um ACK e salva a mensagem em um arquivo. Dessa forma, você pode ver exatamente o que está recebendo!
require 'thread'
require 'socket'
server = TCPServer.new(3003)
puts "Listening on port 3003"
while true
Thread.new(server.accept) do |client|
#raw = client.readlines # This is slooooow
begin
raw = client.recvfrom(1024) # Cut off after 1mb
msg_control_id = raw.first.split(/|/)[9]
ack = "xbMSH|^~\&|your_ae||their_ae||#{Time.now.strftime("%Y%m%d%H%M%S")}||ACK|#{rand(10000)}|P|2.3|xdMSA|AA|#{msg_control_id}|xdx1cxd"
client.puts ack.force_encoding("ISO-8859-1") # force encoding
client.close
rescue => e
puts e.message
end
if raw != nil
file = File.open("hl7.txt", 'a+')
puts "received.. #{raw}"
file.puts(raw.to_s.force_encoding("ISO-8859-1")) # dump the msg
file.puts("Split")
raw.each do |line| # Split the msg and display
line.split(/r/).each do |segment|
file.puts(segment)
end
end
file.close
end
end
end