EpochMessage
- EPOCH V3 Network Message
The EpochMessage
class implements EPOCH V3 messages. An EPOCH
message consists of a 12-byte header and an optional message body. The header
contains 4 fields:
Typically, when a client sends a command to a server, the server returns the
command message ID in the response ID field of the acknowledgement message.
[The V3 communications library has a complicated scheme for managing message
IDs; furthermore, the IDs are not even visible to the application. Since these
IDs are not particularly useful, the ERA library doesn't bother with them; the
EpochMessage::ID()
methods are available for servers that need to
respond to strictly conforming V3 messages.]
The optional message body can be an arbitrary sequence of bytes, stored and
retrieved with the Body()
methods. More commonly, however, the
message body is a collection of EPOCH V3 name-value pairs
(named variables) stored and retrieved in XDR format
using the Encode()
and Decode()
methods, respectively.
The following code fragment constructs and sends a connect message to an EPOCH V3 device handler:
#include "EpochMessage.h" // Epoch message class. #include "EpochStream.h" // Epoch stream class. ... EpochStream handler ; // Connection to device handler. ... NVarSet *set = new NVarSet ; set->Add (new NVar (3, "HANDLEUNIT")) ; // Device unit #3. EpochMessage message (MSG_CONNECT) ; message.Encode (set) ; // Encode parameters in body. handler.Write (-1.0, message) ; // Send connect message.
To read the connect message and return an acknowledgement, the device handler might do as follows:
#include "EpochMessage.h" // Epoch message class. #include "EpochStream.h" // Epoch stream class. ... EpochStream *client ; // Connection to device client. ... EpochMessage *message ; client->Read (-1.0, message) ; if (message->Type () == MSG_CONNECT) { // Decode parameters from body. NVarSet *parameters = message->Decode () ; ... process parameters ... delete parameters ; EpochMessage response (MSG_ACK) ; // Construct response message. response.ID (message->ID ()) ; // Put client ID in response field. client->Write (-1.0, response) ; // Send acknowledgement message. } delete message ;
EpochMessage()
- creates an EPOCH message.
EpochMessage()
- copy constructor.
~EpochMessage()
- destroys an EPOCH message.
=()
- assignment operator.
Header()
- gets the message header.
Type()
- gets the message type.
Type()
- sets the message type.
Length()
- gets the length of the message body.
Body()
- gets the message body.
Body()
- sets the message body.
Decode()
- decodes the message body into a set of named variables.
Encode()
- encodes a set of named variables into the message body.
Erase()
- erases the contents of a message.
Name()
- converts a message number to a message name.
Number()
- converts a message name to a message number.
Copy()
- copies the contents of one message to another.
EpochMessage.cpp
EpochMessage.h