Core Library  1.7.0.0
Library containing core utilities and tools for threading, networking, logging, INI and CSV file management etc.
core_lib::asio::tcp::SimpleTcpClient Class Referencefinal

A simple bi-directional TCP client, which uses the class MessageHeader as the message header type. More...

#include <SimpleTcpClient.h>

Public Member Functions

 SimpleTcpClient ()=delete
 Default constructor - deleted.
 
 SimpleTcpClient (boost_iocontext_t &ioContext, const defs::connection_t &server, const defs::default_message_dispatcher_t &messageDispatcher, eSendOption sendOption=eSendOption::nagleOn, size_t maxAllowedUnsentAsyncMessages=MAX_UNSENT_ASYNC_MSG_COUNT, size_t memPoolMsgCount=0)
 Initialisation constructor. More...
 
 SimpleTcpClient (const defs::connection_t &server, const defs::default_message_dispatcher_t &messageDispatcher, eSendOption sendOption=eSendOption::nagleOn, size_t maxAllowedUnsentAsyncMessages=MAX_UNSENT_ASYNC_MSG_COUNT, size_t memPoolMsgCount=0)
 Initialisation constructor. More...
 
 ~SimpleTcpClient ()=default
 Default destructor.
 
 SimpleTcpClient (const SimpleTcpClient &)=delete
 Copy constructor - deleted.
 
SimpleTcpClientoperator= (const SimpleTcpClient &)=delete
 Copy assignment operator - deleted.
 
 SimpleTcpClient (SimpleTcpClient &&)=delete
 Move constructor - deleted.
 
SimpleTcpClientoperator= (SimpleTcpClient &&)=delete
 Move assignment operator - deleted.
 
defs::connection_t ServerConnection () const
 Retrieve server connection details. More...
 
bool Connected () const
 Check if the client is connected to the server. More...
 
defs::connection_t GetClientDetailsForServer ()
 Retrieve this client's connection details. More...
 
void CloseConnection ()
 Manually close the connection. More...
 
bool SendMessageToServerAsync (int32_t messageId, const defs::connection_t &responseAddress=defs::NULL_CONNECTION)
 Send a header-only message to the server asynchronously. More...
 
bool SendMessageToServerSync (int32_t messageId, const defs::connection_t &responseAddress=defs::NULL_CONNECTION)
 Send a header-only message to the server synchronously. More...
 
bool SendMessageToServerAsync (const defs::char_buffer_t &message, int32_t messageId, const defs::connection_t &responseAddress=defs::NULL_CONNECTION)
 Send a header plus message buffer to the server asynchronously. More...
 
bool SendMessageToServerSync (const defs::char_buffer_t &message, int32_t messageId, const defs::connection_t &responseAddress=defs::NULL_CONNECTION)
 Send a header plus message buffer to the server synchronously. More...
 
template<typename T , typename A = serialize::archives::out_port_bin_t>
bool SendMessageToServerAsync (const T &message, int32_t messageId, const defs::connection_t &responseAddress=defs::NULL_CONNECTION)
 Send a full message to the server asynchronously. More...
 
template<typename T , typename A = serialize::archives::out_port_bin_t>
bool SendMessageToServerSync (const T &message, int32_t messageId, const defs::connection_t &responseAddress=defs::NULL_CONNECTION)
 Send a full message to the server synchronously. More...
 
bool SendMessageToServerAsync (const defs::char_buffer_t &message)
 Send a message buffer to the server asynchronously. More...
 
bool SendMessageToServerSync (const defs::char_buffer_t &message)
 Send a message buffer to the server synchronously. More...
 
size_t NumberOfUnsentAsyncMessages () const
 Get number of unsent async messages. More...
 

Private Attributes

messages::MessageBuilder m_messageBuilder {}
 Default message builder object of type core_lib::asio::messages::MessageBuilder.
 
messages::MessageHandler m_messageHandler {}
 Default message handler object of type core_lib::asio::messages::MessageHandler.
 
TcpTypedClient< messages::MessageBuilderm_tcpTypedClient
 Our actual typed TCP client object.
 

Detailed Description

A simple bi-directional TCP client, which uses the class MessageHeader as the message header type.

Constructor & Destructor Documentation

◆ SimpleTcpClient() [1/2]

core_lib::asio::tcp::SimpleTcpClient::SimpleTcpClient ( boost_iocontext_t ioContext,
const defs::connection_t server,
const defs::default_message_dispatcher_t messageDispatcher,
eSendOption  sendOption = eSendOption::nagleOn,
size_t  maxAllowedUnsentAsyncMessages = MAX_UNSENT_ASYNC_MSG_COUNT,
size_t  memPoolMsgCount = 0 
)

Initialisation constructor.

Parameters
[in]ioContext- External boost IO context to manage ASIO.
[in]server- Connection object describing target server's address and port.
[in]messageDispatcher- Callback to use to dispatch received messages.
[in]sendOption- Socket send option to control the use of the Nagle algorithm.
[in]maxAllowedUnsentAsyncMessages- Maximum allowed number of unsent async messages.
[in]memPoolMsgCount- Number of messages (per client) in pool for received message handling, defaults to 0, which implies no pool used.

Typically use this constructor when managing a bool of threads using an instance of core_lib::asioIoServoceThreadGroup in your application to manage a pool of std::threads. This means you can use a single thread pool and all ASIO operations will be executed using this thread pool managed by a single IO context. This is the recommended constructor.

NOTE: When the message pool feature is used then all messages passed to the the registered dispatcher are managed by the internal pool. Care must be taken in the dispatcher to process the messages as quickly as possibly so the pool doesn't fill and start overwriting older messages. If the messages need to be kept then it is the dispatchers job to make a suitable copy of the received message.

◆ SimpleTcpClient() [2/2]

core_lib::asio::tcp::SimpleTcpClient::SimpleTcpClient ( const defs::connection_t server,
const defs::default_message_dispatcher_t messageDispatcher,
eSendOption  sendOption = eSendOption::nagleOn,
size_t  maxAllowedUnsentAsyncMessages = MAX_UNSENT_ASYNC_MSG_COUNT,
size_t  memPoolMsgCount = 0 
)

Initialisation constructor.

Parameters
[in]server- Connection object describing target server's address and port.
[in]messageDispatcher- Callback to use to dispatch received messages.
[in]sendOption- Socket send option to control the use of the Nagle algorithm.
[in]maxAllowedUnsentAsyncMessages- Maximum allowed number of unsent async messages.
[in]memPoolMsgCount- Number of messages (per client) in pool for received message handling, defaults to 0, which implies no pool used.

This constructor does not require an external IO context to run instead it creates its own IO context object along with its own thread. For very simple cases this version will be fine but in more performance and resource critical situations the external IO context constructor is recommend.

NOTE: When the message pool feature is used then all messages passed to the the registered dispatcher are managed by the internal pool. Care must be taken in the dispatcher to process the messages as quickly as possibly so the pool doesn't fill and start overwriting older messages. If the messages need to be kept then it is the dispatchers job to make a suitable copy of the received message.

Member Function Documentation

◆ CloseConnection()

void core_lib::asio::tcp::SimpleTcpClient::CloseConnection ( )

Manually close the connection.

Note that this object uses RAII so will close the connection when destroyed.

◆ Connected()

bool core_lib::asio::tcp::SimpleTcpClient::Connected ( ) const

Check if the client is connected to the server.

Returns
True if connected, false otherwise.

◆ GetClientDetailsForServer()

auto core_lib::asio::tcp::SimpleTcpClient::GetClientDetailsForServer ( )

Retrieve this client's connection details.

Returns
Connection object describing this client's address and port.

◆ NumberOfUnsentAsyncMessages()

size_t core_lib::asio::tcp::SimpleTcpClient::NumberOfUnsentAsyncMessages ( ) const

Get number of unsent async messages.

Returns
Number of unsent messages

◆ SendMessageToServerAsync() [1/4]

bool core_lib::asio::tcp::SimpleTcpClient::SendMessageToServerAsync ( int32_t  messageId,
const defs::connection_t responseAddress = defs::NULL_CONNECTION 
)

Send a header-only message to the server asynchronously.

Parameters
[in]messageId- Unique message ID to insert into message header.
[in]responseAddress- (Optional) The address and port where the server should send the response, the default value will mean the response address will point to this client socket.
Returns
Returns the success state of whether the message was posted to the send queue.

◆ SendMessageToServerAsync() [2/4]

bool core_lib::asio::tcp::SimpleTcpClient::SendMessageToServerAsync ( const defs::char_buffer_t message,
int32_t  messageId,
const defs::connection_t responseAddress = defs::NULL_CONNECTION 
)

Send a header plus message buffer to the server asynchronously.

Parameters
[in]message- Message buffer.
[in]messageId- Unique message ID to insert into message header.
[in]responseAddress- (Optional) The address and port where the server should send the response, the default value will mean the response address will point to this client socket.
Returns
Returns the success state of whether the message was posted to the send queue.

◆ SendMessageToServerAsync() [3/4]

template<typename T , typename A = serialize::archives::out_port_bin_t>
bool core_lib::asio::tcp::SimpleTcpClient::SendMessageToServerAsync ( const T &  message,
int32_t  messageId,
const defs::connection_t responseAddress = defs::NULL_CONNECTION 
)
inline

Send a full message to the server asynchronously.

Parameters
[in]message- The message of type T to send behind the header serialized to an boost::serialization-compatible archive of type A.
[in]messageId- Unique message ID to insert into message header.
[in]responseAddress- (Optional) The address and port where the server should send the response, the default value will mean the response address will point to this client socket.
Returns
Returns the success state of whether the message was posted to the send queue.

◆ SendMessageToServerAsync() [4/4]

bool core_lib::asio::tcp::SimpleTcpClient::SendMessageToServerAsync ( const defs::char_buffer_t message)

Send a message buffer to the server asynchronously.

Parameters
[in]message- Message buffer.
Returns
Returns the success state of whether the message was posted to the send queue.

◆ SendMessageToServerSync() [1/4]

bool core_lib::asio::tcp::SimpleTcpClient::SendMessageToServerSync ( int32_t  messageId,
const defs::connection_t responseAddress = defs::NULL_CONNECTION 
)

Send a header-only message to the server synchronously.

Parameters
[in]messageId- Unique message ID to insert into message header.
[in]responseAddress- (Optional) The address and port where the server should send the response, the default value will mean the response address will point to this client socket.
Returns
Returns the success state of the send as a boolean.

◆ SendMessageToServerSync() [2/4]

bool core_lib::asio::tcp::SimpleTcpClient::SendMessageToServerSync ( const defs::char_buffer_t message,
int32_t  messageId,
const defs::connection_t responseAddress = defs::NULL_CONNECTION 
)

Send a header plus message buffer to the server synchronously.

Parameters
[in]message- Message buffer.
[in]messageId- Unique message ID to insert into message header.
[in]responseAddress- (Optional) The address and port where the server should send the response, the default value will mean the response address will point to this client socket.
Returns
Returns the success state of the send as a boolean.

◆ SendMessageToServerSync() [3/4]

template<typename T , typename A = serialize::archives::out_port_bin_t>
bool core_lib::asio::tcp::SimpleTcpClient::SendMessageToServerSync ( const T &  message,
int32_t  messageId,
const defs::connection_t responseAddress = defs::NULL_CONNECTION 
)
inline

Send a full message to the server synchronously.

Parameters
[in]message- The message of type T to send behind the header serialized to an boost::serialization-compatible archive of type A.
[in]messageId- Unique message ID to insert into message header.
[in]responseAddress- (Optional) The address and port where the server should send the response, the default value will mean the response address will point to this client socket.
Returns
Returns the success state of the send as a boolean.

◆ SendMessageToServerSync() [4/4]

bool core_lib::asio::tcp::SimpleTcpClient::SendMessageToServerSync ( const defs::char_buffer_t message)

Send a message buffer to the server synchronously.

Parameters
[in]message- Message buffer.
Returns
Returns the success state of the send as a boolean.

◆ ServerConnection()

auto core_lib::asio::tcp::SimpleTcpClient::ServerConnection ( ) const

Retrieve server connection details.

Returns
- Connection object describing target server's address and port.

The documentation for this class was generated from the following files: