Rogue Wave banner
Previous fileTop of DocumentContentsIndex pageNext file
Introduction to HydraExpress
Rogue Wave web site:  Home Page  |  Main Documentation Page

5.2 Creating a Custom Connector

To create a custom connector, you need to:

  1. derive a new class from rwsf::ConnectorImp

  2. override the pure virtual methods init(), reinit(), start(), and stop().

Here is some example code:

//1The rwsf::Config class holds properties passed to the connector. For more information on the data and methods available through this class, see its class description in the HydraExpress C++ API Reference Guide.
//2The rwsf::AgentContext class provides access to Agent resources.
//3reinit() must be in your implementation because it is a pure virtual function. However, this is just a hook for functionality in the HydraEnterprise product, so you should just implement this as an empty method.

The following code shows the init() method for a connector that watches a directory. The name of the directory is passed to the connector in an rwsf::Config instance.

The derived init() method should invoke the init() method of its parent so the parent class can also process any information from the rwsf::Config instance.

The start() method should be implemented as a non-blocking method, and should prepare the system that will wait for events and generate requests for the rest of the system. In most cases, the start() method spawns at least one thread that listens for requests. The Agent invokes the start() method after it has initialized all connectors and handlers.

The stop() method should be implemented as a blocking call. The stop() method first releases any resources the connector owns and then stops the connector. The Agent invokes the stop() method when the Agent receives a signal to shut down.

A connector needs to do the following work:

The following table shows some of the main data structures in rwsf::MessageInfo.

Table 8: Data structures in rwsf::MessageInfo

NameTypeParentDescription

rwsf:request

rwsf::MessageInfo

 

Data related to the request of this message.

rwsf:response

rwsf::MessageInfo

 

Data related to the response to this request.

rwsf:payload

std::string

rwsf:request and rwsf:response

The payload of a message.

rwsf:transport

rwsf::MessageInfo

rwsf:request and rwsf:response

Data specific to the transport that was used. (e.g. HTTP headers, HTTP method, HTTP version, URI).

Here is some example code:

When the invoke has completed, the rwsf::MessageInfo should contain any information needed to send back a response. This information might include a response payload, headers, a status code, and so on. You need to implement code for writing that information to a location where the client can retrieve it.

Finally, use the following convenience macro that generates code to create a connector instance.

Compile your new connector into a shared library (DLL) and place it in the bin directory of your HydraExpress installation. You are now set to load the connector into the Agent. You do this by creating a new rwsf:connector element in rwagent.xml with the appropriate configuration information. For example:

The name attribute is the string that represents the connector to the rest of the system. This string must be unique in the system.

The class attribute defines how to create an instance of this connector. In this example, myconnector is the name of the shared library that contains the connector code. The string createMyConnector is the name of the method that was created from the RWSF_DEFINE_CONNECTOR macro described above.

The handlerChain attribute specifies the name of the handler chain that this connector is tied to. The handler chain must be declared in rwagent.xml before the connector is declared. The example uses the handler chain that the HTTP/1.1 connector is using.



Previous fileTop of DocumentContentsIndex pageNext file

© Copyright Rogue Wave Software, Inc. All Rights Reserved. All Rights Reserved. Rogue Wave is a registered trademark of Rogue Wave Software, Inc. in the United States and other countries. HydraExpress is a trademark of Rogue Wave Software, Inc. All other trademarks are the property of their respective owners.
Contact Rogue Wave about documentation or support issues.