PhoenixZMQ  2.0.0
Library which integrates zeromq use in Phoenix
PZmqBackend Class Reference

Backend to use ZMQ library with PAbtractSocket. More...

#include <PZmqBackend.h>

Public Types

typedef zmq::message_t Message
 Define the type of message used by the PAbstractSocketManager. More...
 
typedef PZmqParam Param
 Define the type of extra parameters which can be used to create a Socket used by the PAbstractSocketManager. More...
 
typedef zmq::socket_t * Socket
 Define the socket of the backend used by the PAbstractSocketManager. More...
 

Public Member Functions

 PZmqBackend ()
 Default constructor of PZmqBackend. More...
 

Static Public Member Functions

static Param client (const std::string &address, size_t port, zmq::context_t *context=NULL, int type=ZMQ_PULL, int nbBufferMessage=10000, int bufferSizeByte=1000000, size_t threadAffinity=0lu, ssize_t dataRate=200000l)
 Create a client parameter. More...
 
static void close (Socket &socket)
 Close the given socket. More...
 
static bool createClientSocket (Socket &socket, const Param &param)
 Create a client socket. More...
 
static bool createClientSocket (Socket &socket, const std::string &address, size_t port, const PZmqParam &param)
 Create a client socket. More...
 
static bool createServerSocket (Socket &socket, const Param &param)
 Create a server socket. More...
 
static bool createServerSocket (Socket &socket, const std::string &address, size_t port, const PZmqParam &param)
 Create a server socket. More...
 
static bool isConnected (const Socket &socket)
 Close the given socket. More...
 
static void mockToMsg (Message &msg, DataStreamMsg &mockMsg)
 Copy mock message data into current backend message. More...
 
static const DataStreamIter msgData (const Message &msg)
 Get the data of a message. More...
 
static DataStreamIter msgData (Message &msg)
 Get the data of a message. More...
 
static void msgResize (Message &msg, size_t sizeMsg)
 Resize a message. More...
 
static size_t msgSize (const Message &msg)
 Get the size of a message. More...
 
static void msgToMock (DataStreamMsg &mockMsg, const Message &msg)
 Copy current backend message data into mock message. More...
 
static bool recv (Socket &socket, Message &msg, PRecvFlag::PRecvFlag flag)
 Recieve message from the given socket. More...
 
static bool send (Socket &socket, Message &msg, PSendFlag::PSendFlag flag)
 Send message on the given socket. More...
 
static Param server (const std::string &address, size_t port, zmq::context_t *context=NULL, int type=ZMQ_PUSH, int nbBufferMessage=10000, int bufferSizeByte=1000000, size_t threadAffinity=0lu, ssize_t dataRate=200000l)
 Create a server parameter. More...
 

Detailed Description

Backend to use ZMQ library with PAbtractSocket.

Definition at line 38 of file PZmqBackend.h.

Member Typedef Documentation

◆ Message

typedef zmq::message_t PZmqBackend::Message

Define the type of message used by the PAbstractSocketManager.

Definition at line 43 of file PZmqBackend.h.

◆ Param

Define the type of extra parameters which can be used to create a Socket used by the PAbstractSocketManager.

Definition at line 45 of file PZmqBackend.h.

◆ Socket

typedef zmq::socket_t* PZmqBackend::Socket

Define the socket of the backend used by the PAbstractSocketManager.

Definition at line 41 of file PZmqBackend.h.

Constructor & Destructor Documentation

◆ PZmqBackend()

PZmqBackend::PZmqBackend ( )

Default constructor of PZmqBackend.

Definition at line 62 of file PZmqBackend.cpp.

62  {
63 
64 }

Member Function Documentation

◆ client()

PZmqBackend::Param PZmqBackend::client ( const std::string &  address,
size_t  port,
zmq::context_t *  context = NULL,
int  type = ZMQ_PULL,
int  nbBufferMessage = 10000,
int  bufferSizeByte = 1000000,
size_t  threadAffinity = 0lu,
ssize_t  dataRate = 200000l 
)
static

Create a client parameter.

Parameters
address: address to be connected to
port: port to be used
context: zmq context where to create socket
type: type of the connection (ZMQ_PULL, ZMQ_PUSH, etc)
nbBufferMessage: number of messages to be buffered
bufferSizeByte: size of the zmq buffer in bytes
threadAffinity: bit mask which determines which threads from the 0MQ I/O thread pool associated with the socket's context shall handle newly created connections (1 : means first, 2 : means second, 3 : means first and second, etc)
dataRate: expected data rate (in kilobytes per second)
Returns
corresponding PZmqBackend::Param (or PZmqParam)

Definition at line 77 of file PZmqBackend.cpp.

77  {
78  return pzmq_createParamClient(address, port, context, type, nbBufferMessage, bufferSizeByte, threadAffinity, dataRate);
79 }
PZmqParam pzmq_createParamClient(const std::string &address, size_t port, zmq::context_t *context, int type, int nbBufferMessage, int bufferSizeByte, size_t threadAffinity, ssize_t dataRate)
Create param for a client socket.
Definition: PZmqBackend.cpp:20

References pzmq_createParamClient().

+ Here is the call graph for this function:

◆ close()

void PZmqBackend::close ( PZmqBackend::Socket socket)
static

Close the given socket.

Parameters
[out]socket: socket to be closed

Definition at line 227 of file PZmqBackend.cpp.

227  {
228  pzmq_closeServerSocket(socket);
229 }
void pzmq_closeServerSocket(zmq::socket_t *&socket)
Close the given server socket.

References pzmq_closeServerSocket().

+ Here is the call graph for this function:

◆ createClientSocket() [1/2]

bool PZmqBackend::createClientSocket ( Socket socket,
const Param param 
)
static

Create a client socket.

Parameters
[out]socket: socket to be created
param: extra customisable parameters for the creation of the socket (depends on the backend)
Returns
true if the socket has been created, false otherwise

Definition at line 127 of file PZmqBackend.cpp.

127  {
128  socket = pzmq_createClientSocket(*param.context, param.address, param.port, param.type, param.nbBufferMessage,
129  param.bufferSizeByte, param.threadAffinity, param.dataRate);
130  return socket != NULL;
131 }
zmq::socket_t * pzmq_createClientSocket(zmq::context_t &context, int type, const std::string &address, size_t port)
Create a client socket to be used by the SocketManagerZMQ.
Definition: phoenix_zmq.cpp:18

References PZmqParam::address, PZmqParam::bufferSizeByte, PZmqParam::context, PZmqParam::dataRate, PZmqParam::nbBufferMessage, PZmqParam::port, pzmq_createClientSocket(), PZmqParam::threadAffinity, and PZmqParam::type.

+ Here is the call graph for this function:

◆ createClientSocket() [2/2]

bool PZmqBackend::createClientSocket ( PZmqBackend::Socket socket,
const std::string &  address,
size_t  port,
const PZmqParam param 
)
static

Create a client socket.

Parameters
[out]socket: socket to be created
address: address of the server, the client has to connect to
port: port to be used for the connection
param: extra customisable parameters for the creation of the socket (depends on the backend)
Returns
true if the socket has been created, false otherwise

Definition at line 103 of file PZmqBackend.cpp.

103  {
104  socket = pzmq_createClientSocket(*param.context, address, port, param.type, param.nbBufferMessage,
105  param.bufferSizeByte, param.threadAffinity, param.dataRate);
106  return socket != NULL;
107 }
zmq::context_t * context
Context.
Definition: PZmqBackend.h:17
ssize_t dataRate
Data rate.
Definition: PZmqBackend.h:31
int nbBufferMessage
Number of messages in the buffer.
Definition: PZmqBackend.h:25
int bufferSizeByte
Size of the message buffer in bytes.
Definition: PZmqBackend.h:27
int type
Socket type.
Definition: PZmqBackend.h:23
size_t threadAffinity
Mask of threads which deal with reconnection.
Definition: PZmqBackend.h:29

References PZmqParam::bufferSizeByte, PZmqParam::context, PZmqParam::dataRate, PZmqParam::nbBufferMessage, pzmq_createClientSocket(), PZmqParam::threadAffinity, and PZmqParam::type.

+ Here is the call graph for this function:

◆ createServerSocket() [1/2]

bool PZmqBackend::createServerSocket ( Socket socket,
const Param param 
)
static

Create a server socket.

Parameters
[out]socket: socket to be created
param: extra customisable parameters for the creation of the socket (depends on the backend)
Returns
true if the socket has been created, false otherwise

Definition at line 138 of file PZmqBackend.cpp.

138  {
139  socket = pzmq_createServerSocket(*param.context, param.port, param.type, param.nbBufferMessage, param.bufferSizeByte,
140  param.threadAffinity, param.dataRate);
141  return socket != NULL;
142 }
zmq::socket_t * pzmq_createServerSocket(zmq::context_t &context, int type, size_t port)
Create a server socket to be used by the SocketManagerZMQ.
Definition: phoenix_zmq.cpp:48

References PZmqParam::bufferSizeByte, PZmqParam::context, PZmqParam::dataRate, PZmqParam::nbBufferMessage, PZmqParam::port, pzmq_createServerSocket(), PZmqParam::threadAffinity, and PZmqParam::type.

+ Here is the call graph for this function:

◆ createServerSocket() [2/2]

bool PZmqBackend::createServerSocket ( PZmqBackend::Socket socket,
const std::string &  address,
size_t  port,
const PZmqParam param 
)
static

Create a server socket.

Parameters
[out]socket: socket to be created
address: address of the server, the client has to connect to
port: port to be used for the connection
param: extra customisable parameters for the creation of the socket (depends on the backend)
Returns
true if the socket has been created, false otherwise

Definition at line 116 of file PZmqBackend.cpp.

116  {
117  socket = pzmq_createServerSocket(*param.context, port, param.type, param.nbBufferMessage, param.bufferSizeByte,
118  param.threadAffinity, param.dataRate);
119  return socket != NULL;
120 }

References PZmqParam::bufferSizeByte, PZmqParam::context, PZmqParam::dataRate, PZmqParam::nbBufferMessage, pzmq_createServerSocket(), PZmqParam::threadAffinity, and PZmqParam::type.

+ Here is the call graph for this function:

◆ isConnected()

bool PZmqBackend::isConnected ( const Socket socket)
static

Close the given socket.

Parameters
socket: socket to be checked
Returns
true if the socket is connected, false otherwise

Definition at line 235 of file PZmqBackend.cpp.

235  {
236  if(socket != NULL){
237 #if (CPPZMQ_VERSION_MAJOR*100 + CPPZMQ_VERSION_MINOR*10 + CPPZMQ_VERSION_PATCH) >= 471
238  return socket->handle() != NULL;
239 #else
240  return socket->connected();
241 #endif
242  }else{
243  return false;
244  }
245 }

◆ mockToMsg()

void PZmqBackend::mockToMsg ( PZmqBackend::Message msg,
DataStreamMsg mockMsg 
)
static

Copy mock message data into current backend message.

Parameters
[out]msg: message of the current backend to be converted
mockMsg: mock message

Definition at line 261 of file PZmqBackend.cpp.

261  {
262  size_t dataSize(mockMsg.size());
263  PZmqBackend::msgResize(msg, dataSize);
264  memcpy(PZmqBackend::msgData(msg), mockMsg.data(), dataSize);
265 }
static void msgResize(Message &msg, size_t sizeMsg)
Resize a message.
static const DataStreamIter msgData(const Message &msg)
Get the data of a message.

References msgData(), and msgResize().

+ Here is the call graph for this function:

◆ msgData() [1/2]

const DataStreamIter PZmqBackend::msgData ( const Message msg)
static

Get the data of a message.

Parameters
msg: message to be used
Returns
data of the message in bytes

Definition at line 212 of file PZmqBackend.cpp.

212  {
213  return (const DataStreamIter)msg.data();
214 }
DataStreamType * DataStreamIter

Referenced by mockToMsg(), and msgToMock().

+ Here is the caller graph for this function:

◆ msgData() [2/2]

DataStreamIter PZmqBackend::msgData ( PZmqBackend::Message msg)
static

Get the data of a message.

Parameters
msg: message to be used
Returns
data of the message in bytes

Definition at line 220 of file PZmqBackend.cpp.

220  {
221  return (DataStreamIter)msg.data();
222 }

◆ msgResize()

void PZmqBackend::msgResize ( PZmqBackend::Message msg,
size_t  sizeMsg 
)
static

Resize a message.

Parameters
[out]msg: message to be resized
sizeMsg: new size of the message

Definition at line 196 of file PZmqBackend.cpp.

196  {
197  msg.rebuild(sizeMsg);
198 }

Referenced by mockToMsg().

+ Here is the caller graph for this function:

◆ msgSize()

size_t PZmqBackend::msgSize ( const Message msg)
static

Get the size of a message.

Parameters
msg: message to be used
Returns
size of the message in bytes

Definition at line 204 of file PZmqBackend.cpp.

204  {
205  return msg.size();
206 }

Referenced by msgToMock().

+ Here is the caller graph for this function:

◆ msgToMock()

void PZmqBackend::msgToMock ( DataStreamMsg mockMsg,
const Message msg 
)
static

Copy current backend message data into mock message.

Parameters
[out]mockMsg: mock message
msg: message of the current backend to be converted

Definition at line 251 of file PZmqBackend.cpp.

251  {
252  size_t dataSize(PZmqBackend::msgSize(msg));
253  mockMsg.resize(dataSize);
254  memcpy(mockMsg.data(), PZmqBackend::msgData(msg), dataSize);
255 }
static size_t msgSize(const Message &msg)
Get the size of a message.

References msgData(), and msgSize().

+ Here is the call graph for this function:

◆ recv()

bool PZmqBackend::recv ( PZmqBackend::Socket socket,
PZmqBackend::Message msg,
PRecvFlag::PRecvFlag  flag 
)
static

Recieve message from the given socket.

Parameters
socket: socket to be used
msg: message to be recieved
flag: flags to be used to send the message (BLOCK, NON_BLOCK, etc)
Returns
true on success, false otherwise

Definition at line 183 of file PZmqBackend.cpp.

183  {
184  if(socket != NULL){
185  zmq::recv_result_t res = socket->recv(msg, convertToRecvFlag(flag));
186  return res.has_value(); //Seems, if there is no value, there is also no error
187  }else{
188  return false;
189  }
190 }
zmq::recv_flags convertToRecvFlag(PRecvFlag::PRecvFlag flag)
Convert a recv flag into zmq flag.

References convertToRecvFlag().

+ Here is the call graph for this function:

◆ send()

bool PZmqBackend::send ( PZmqBackend::Socket socket,
PZmqBackend::Message msg,
PSendFlag::PSendFlag  flag 
)
static

Send message on the given socket.

Parameters
socket: socket to be used
msg: message to be sent
flag: flag to be used to send the message (BLOCK, NON_BLOCK, etc)
Returns
true on success, false otherwise

Definition at line 159 of file PZmqBackend.cpp.

159  {
160  if(socket != NULL){
161  zmq::send_result_t res = socket->send(msg, convertToSendFlag(flag));
162  return res.has_value(); //Seems, if there is no value, there is also no error
163  }else{
164  return false;
165  }
166 }
zmq::send_flags convertToSendFlag(PSendFlag::PSendFlag flag)
Convert a send flag into zmq flag.

References convertToSendFlag().

+ Here is the call graph for this function:

◆ server()

PZmqBackend::Param PZmqBackend::server ( const std::string &  address,
size_t  port,
zmq::context_t *  context = NULL,
int  type = ZMQ_PUSH,
int  nbBufferMessage = 10000,
int  bufferSizeByte = 1000000,
size_t  threadAffinity = 0lu,
ssize_t  dataRate = 200000l 
)
static

Create a server parameter.

Parameters
address: address to be connected to
port: port to be used
context: zmq context where to create socket
type: type of the connection (ZMQ_PULL, ZMQ_PUSH, etc)
nbBufferMessage: number of messages to be buffered
bufferSizeByte: size of the zmq buffer in bytes
threadAffinity: bit mask which determines which threads from the 0MQ I/O thread pool associated with the socket's context shall handle newly created connections (1 : means first, 2 : means second, 3 : means first and second, etc)
dataRate: expected data rate (in kilobytes per second)
Returns
corresponding PZmqBackend::Param (or PZmqParam)

Definition at line 92 of file PZmqBackend.cpp.

92  {
93  return pzmq_createParamServer(address, port, context, type, nbBufferMessage, bufferSizeByte, threadAffinity, dataRate);
94 }
PZmqParam pzmq_createParamServer(const std::string &address, size_t port, zmq::context_t *context, int type, int nbBufferMessage, int bufferSizeByte, size_t threadAffinity, ssize_t dataRate)
Create param for a client socket.
Definition: PZmqBackend.cpp:46

References pzmq_createParamServer().

+ Here is the call graph for this function:

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