Any HL7 application will at some point receive a HL7 message from somewhere, at an other point a message is sent to somewhere. Sending or receiving of messages with ProtoGen/HL7 means reading and writing them to and from a stream. The stream may be linked to a file or a socket, ProtoGen/HL7 does not care about this. Since C++ iostream stream abstraction is used, you can send and receive HL7 messages like you would read or write any other I/O in C++ using iostreams. For example:
istream is; ostream os; ACKmsg ack; is >> ack; os << ack;
This reads an acknowledgement (ACK) message from the stream is
and
outputs it on an other stream os
.
One would expect a HL7 stream to come as three classes: class hl7istream derived from class istream, class hl7ostream derived from class ostream, and class hl7iostream derived from class hl7istream and class hl7ostream. ProtoGen/HL7 will provide this in future releases, however until then you have to take a slight inconvenience: Any iostream that is dedicated to transport HL7 messages must be prepared to do so. This is done according to the following example:
iostream hl7ios; xios hl7xios(hl7ios);
An object named hl7xios
is declared to be of class xios
and initialized with an ordinary iostream object. The xios
object is not used after it is constructed. Any HL7 communication is
sent via the iostream
object after it is thus prepared. This is
certainly a little confusing but will be cleaned up in a future release
of ProtoGen/HL7.
An iostream
that is prepared to transport HL7 messages can be in
one of two modes that decides how HL7 messages are to be encoded:
hl7er or debug. If a HL7 message shall be sent or received,
the stream must be in the "hl7er" mode, which means that the HL7
objects are encoded using the HL7 encoding rules. The "debug" mode
is used for a structured output that can be used in log files. The debug
output can be configured in xios.h during compile time of the HL7 class
library. It is not possible to read back a message that has been written
using the debug mode.
The modes are set using the manipulators hl7er
and debug
.
A freshly prepared HL7 stream is always in "hl7er" mode.