DelegateMQ
Loading...
Searching...
No Matches
UdpTransport Class Reference

Win32 UDP transport implementation for DelegateMQ. More...

#include <ArmLwipUdpTransport.h>

Inheritance diagram for UdpTransport:
ITransport ITransport ITransport

Public Types

enum class  Type {
  PUB , SUB , PUB , SUB ,
  PUB , SUB
}
 
enum class  Type {
  PUB , SUB , PUB , SUB ,
  PUB , SUB
}
 
enum class  Type {
  PUB , SUB , PUB , SUB ,
  PUB , SUB
}
 

Public Member Functions

 UdpTransport ()
 
 ~UdpTransport ()
 
int Create (Type type, const char *addr, uint16_t port)
 
void Close ()
 
virtual int Send (xostringstream &os, const DmqHeader &header) override
 
virtual int Receive (xstringstream &is, DmqHeader &header) override
 
void SetTransportMonitor (ITransportMonitor *transportMonitor)
 
void SetSendTransport (ITransport *sendTransport)
 
void SetRecvTransport (ITransport *recvTransport)
 
 UdpTransport ()
 
 ~UdpTransport ()
 
int Create (Type type, const char *addr, uint16_t port)
 
void Close ()
 
virtual int Send (xostringstream &os, const DmqHeader &header) override
 
virtual int Receive (xstringstream &is, DmqHeader &header) override
 
void SetTransportMonitor (ITransportMonitor *transportMonitor)
 
void SetSendTransport (ITransport *sendTransport)
 
void SetRecvTransport (ITransport *recvTransport)
 
 UdpTransport ()
 
 ~UdpTransport ()
 
int Create (Type type, LPCSTR addr, USHORT port)
 
void Close ()
 
virtual int Send (xostringstream &os, const DmqHeader &header) override
 
virtual int Receive (xstringstream &is, DmqHeader &header) override
 
void SetTransportMonitor (ITransportMonitor *transportMonitor)
 
void SetSendTransport (ITransport *sendTransport)
 
void SetRecvTransport (ITransport *recvTransport)
 
- Public Member Functions inherited from ITransport

Detailed Description

Win32 UDP transport implementation for DelegateMQ.

See also
https://github.com/endurodave/DelegateMQ David Lafreniere, 2025.

This class implements the ITransport interface using Windows Sockets (Winsock2) for connectionless UDP communication. It supports two modes: PUB (Publisher/Sender) and SUB (Subscriber/Receiver).

Key Features:

  1. Message Oriented: Transmits discrete packets containing serialized delegate arguments and framing headers.
  2. Reliability Support: Integrates with TransportMonitor to track outgoing sequence numbers and process incoming ACKs to detect packet loss.
  3. Socket Management: Use WinsockConnect class in main() for WSAStartup and socket creation/cleanup.
Note
This implementation uses blocking sockets with timeouts (SO_RCVTIMEO) to prevent indefinite blocking during receive operations.

Win32 UDP transport example.

Member Enumeration Documentation

◆ Type [1/3]

enum class UdpTransport::Type
strong
Enumerator
PUB 
SUB 
PUB 
SUB 
PUB 
SUB 

◆ Type [2/3]

enum class UdpTransport::Type
strong
Enumerator
PUB 
SUB 
PUB 
SUB 
PUB 
SUB 

◆ Type [3/3]

enum class UdpTransport::Type
strong
Enumerator
PUB 
SUB 
PUB 
SUB 
PUB 
SUB 

Constructor & Destructor Documentation

◆ UdpTransport() [1/3]

UdpTransport::UdpTransport ( )
inline

◆ ~UdpTransport() [1/3]

UdpTransport::~UdpTransport ( )
inline

◆ UdpTransport() [2/3]

UdpTransport::UdpTransport ( )
inline

◆ ~UdpTransport() [2/3]

UdpTransport::~UdpTransport ( )
inline

◆ UdpTransport() [3/3]

UdpTransport::UdpTransport ( )
inline

◆ ~UdpTransport() [3/3]

UdpTransport::~UdpTransport ( )
inline

Member Function Documentation

◆ Close() [1/3]

void UdpTransport::Close ( )
inline

◆ Close() [2/3]

void UdpTransport::Close ( )
inline

◆ Close() [3/3]

void UdpTransport::Close ( )
inline

◆ Create() [1/3]

int UdpTransport::Create ( Type type,
const char * addr,
uint16_t port )
inline

◆ Create() [2/3]

int UdpTransport::Create ( Type type,
const char * addr,
uint16_t port )
inline

◆ Create() [3/3]

int UdpTransport::Create ( Type type,
LPCSTR addr,
USHORT port )
inline

◆ Receive() [1/3]

virtual int UdpTransport::Receive ( xstringstream & is,
DmqHeader & header )
inlineoverridevirtual

Receive data from a remote

Parameters
[out]isThe received incoming data bytes, not including the header.
[out]headerIncoming delegate message header.
Returns
0 if success.

Implements ITransport.

◆ Receive() [2/3]

virtual int UdpTransport::Receive ( xstringstream & is,
DmqHeader & header )
inlineoverridevirtual

Receive data from a remote

Parameters
[out]isThe received incoming data bytes, not including the header.
[out]headerIncoming delegate message header.
Returns
0 if success.

Implements ITransport.

◆ Receive() [3/3]

virtual int UdpTransport::Receive ( xstringstream & is,
DmqHeader & header )
inlineoverridevirtual

Receive data from a remote

Parameters
[out]isThe received incoming data bytes, not including the header.
[out]headerIncoming delegate message header.
Returns
0 if success.

Implements ITransport.

◆ Send() [1/3]

virtual int UdpTransport::Send ( xostringstream & os,
const DmqHeader & header )
inlineoverridevirtual

Send data to a remote

Parameters
[in]osOutput stream to send.
[in]headerThe header to send.
Returns
0 if success.

Implements ITransport.

◆ Send() [2/3]

virtual int UdpTransport::Send ( xostringstream & os,
const DmqHeader & header )
inlineoverridevirtual

Send data to a remote

Parameters
[in]osOutput stream to send.
[in]headerThe header to send.
Returns
0 if success.

Implements ITransport.

◆ Send() [3/3]

virtual int UdpTransport::Send ( xostringstream & os,
const DmqHeader & header )
inlineoverridevirtual

Send data to a remote

Parameters
[in]osOutput stream to send.
[in]headerThe header to send.
Returns
0 if success.

Implements ITransport.

◆ SetRecvTransport() [1/3]

void UdpTransport::SetRecvTransport ( ITransport * recvTransport)
inline

◆ SetRecvTransport() [2/3]

void UdpTransport::SetRecvTransport ( ITransport * recvTransport)
inline

◆ SetRecvTransport() [3/3]

void UdpTransport::SetRecvTransport ( ITransport * recvTransport)
inline

◆ SetSendTransport() [1/3]

void UdpTransport::SetSendTransport ( ITransport * sendTransport)
inline

◆ SetSendTransport() [2/3]

void UdpTransport::SetSendTransport ( ITransport * sendTransport)
inline

◆ SetSendTransport() [3/3]

void UdpTransport::SetSendTransport ( ITransport * sendTransport)
inline

◆ SetTransportMonitor() [1/3]

void UdpTransport::SetTransportMonitor ( ITransportMonitor * transportMonitor)
inline

◆ SetTransportMonitor() [2/3]

void UdpTransport::SetTransportMonitor ( ITransportMonitor * transportMonitor)
inline

◆ SetTransportMonitor() [3/3]

void UdpTransport::SetTransportMonitor ( ITransportMonitor * transportMonitor)
inline

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