I created a simple TCP Listener to handle HL7 messages, I am receiving the messages correctly, and attempting to send an ACK message back. The server on the other end doesn't seem to be getting the responses though, do you see anything wrong with this set up?
I realize it needs refactored a little, right now I'm just trying to establish the connection.
class Server
{
private TcpListener tcpListener;
private Thread listenThread;
public Server()
{
this.tcpListener = new TcpListener(IPAddress.Parse("hidden"), 55555);
this.listenThread = new Thread(new ThreadStart(ListenForClients));
this.listenThread.Start();
}
private void ListenForClients()
{
this.tcpListener.Start();
while (true)
{
TcpClient client = this.tcpListener.AcceptTcpClient();
Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
clientThread.Start(client);
}
}
private void HandleClientComm(object client)
{
TcpClient tcpClient = (TcpClient)client;
NetworkStream clientStream = tcpClient.GetStream();
byte[] message = new byte[4096];
int bytesRead;
while (true)
{
bytesRead = 0;
try
{
bytesRead = clientStream.Read(message, 0, 4096);
}
catch
{
break;
}
if (bytesRead == 0)
{
break;
}
ASCIIEncoding encoder = new ASCIIEncoding();
string result = encoder.GetString(message, 0, bytesRead);
string[] Lines = result.Split('\n');
string id = "";
foreach (string line in Lines)
{
string[] values = line.Split('|');
if (values[0].Contains("MSH"))
{
id = values[9];
byte[] buffer = encoder.GetBytes("\\vMSH|^~\\&|Rhapsody|JCL|EpicADT|JCL-EPIC-TEST|||ACK|A" + id + "|P|2.4|\\nMSA|AA|" + id + "|");
Console.WriteLine("MSH|^~\\&|Rhapsody|Test|EpicADT|TEST|||ACK|A" + id + "|P|2.4|\\nMSA|AA|" + id + "|");
clientStream.Write(buffer, 0, buffer.Length);
clientStream.Flush();
}
}
}
tcpClient.Close();
}
}