Ouvinte Ruby HL7

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