PhoenixZMQ  2.0.0
Library which integrates zeromq use in Phoenix
PGenericSocket_impl.h
Go to the documentation of this file.
1 /***************************************
2  Auteur : Pierre Aubert
3  Mail : pierre.aubert@lapp.in2p3.fr
4  Licence : CeCILL-C
5 ****************************************/
6 
7 #ifndef __PGENERIC_SOCKET_H_IMPL__
8 #define __PGENERIC_SOCKET_H_IMPL__
9 
10 #include "PGenericSocket.h"
11 
13 
15 template<typename _TBackend, typename _TMockBackend>
17  initialisationPGenericSocket(mode);
18 }
19 
21 template<typename _TBackend, typename _TMockBackend>
23  close();
24 }
25 
27 
31 template<typename _TBackend, typename _TMockBackend>
32 bool PGenericSocket<_TBackend, _TMockBackend>::createClientSocket(const typename _TBackend::Param & param, const typename _TMockBackend::Param & mockParam){
33  bool b(true);
34  if(p_mode != PSocketMode::NO_MOCK){
35  b &= _TMockBackend::createClientSocket(p_mockSocket, mockParam);
36  }
37  if(p_mode != PSocketMode::MOCK){
38  b &= _TBackend::createClientSocket(p_socket, param);
39  }
40  return b;
41 }
42 
44 
48 template<typename _TBackend, typename _TMockBackend>
49 bool PGenericSocket<_TBackend, _TMockBackend>::createServerSocket(const typename _TBackend::Param & param, const typename _TMockBackend::Param & mockParam){
50  bool b(true);
51  if(p_mode != PSocketMode::NO_MOCK){
52  b &= _TMockBackend::createServerSocket(p_mockSocket, mockParam);
53  }
54  if(p_mode != PSocketMode::MOCK){
55  b &= _TBackend::createServerSocket(p_socket, param);
56  }
57  return b;
58 }
59 
61 
65 template<typename _TBackend, typename _TMockBackend>
66 bool PGenericSocket<_TBackend, _TMockBackend>::sendMsg(typename _TBackend::Message & msg, PSendFlag::PSendFlag flag){
67  bool b(true);
68  //This is normal to call the mock backend on a send, because it will check if the send message is the expected one
69  //by respected to the recorded mock
70  if(p_mode != PSocketMode::NO_MOCK){
71  typename _TMockBackend::Message vecTmp;
72  _TBackend::msgToMock(vecTmp, msg);
73  b &= _TMockBackend::send(p_mockSocket, vecTmp, flag);
74  }
75 
76  // If we dont test if b is true, we will always send the message even if the mock backend is not connected
77  // I don't know if it is a good idea to do so
78  // If we do that, we might have somme issues if the user tries to end a message. The mock may give an error that will not be catch
79  // Because the boolean value is not checked. So the real backend could have sent corretly the message and the mock not....
80 
81  if(p_mode != PSocketMode::MOCK && b){
82  b &= _TBackend::send(p_socket, msg, flag);
83  }
84  return b;
85 }
86 
88 
92 template<typename _TBackend, typename _TMockBackend>
93 bool PGenericSocket<_TBackend, _TMockBackend>::recvMsg(typename _TBackend::Message & msg, PRecvFlag::PRecvFlag flag){
94  bool b(true);
95  if(p_mode == PSocketMode::NO_MOCK){ //Normal mode
96  b &= _TBackend::recv(p_socket, msg, flag);
97  }else if(p_mode == PSocketMode::MOCK){ //Mock mode
98  typename _TMockBackend::Message msgMock;
99  b &= _TMockBackend::recv(p_mockSocket, msgMock, flag);
100  if(b){
101  _TBackend::mockToMsg(msg, msgMock);
102  }
103  }else{ //Mock record mode
104  b &= _TBackend::recv(p_socket, msg, flag);
105  if(b){
106  typename _TMockBackend::Message msgMock;
107  _TBackend::msgToMock(msgMock, msg);
108  b &= _TMockBackend::recv(p_mockSocket, msgMock, flag);
109  }
110  else {
111  typename _TMockBackend::Message empty_msg;
112  b &= _TMockBackend::recv(p_mockSocket, empty_msg, flag);
113  }
114  }
115  return b;
116 }
117 
119 template<typename _TBackend, typename _TMockBackend>
121  if(p_mode == PSocketMode::MOCK){
122  _TMockBackend::close(p_mockSocket);
123  }else if(p_mode == PSocketMode::NO_MOCK){
124  _TBackend::close(p_socket);
125  }else{
126  _TMockBackend::close(p_mockSocket);
127  _TBackend::close(p_socket);
128  }
129 }
130 
132 
134 template<typename _TBackend, typename _TMockBackend>
136  bool b(true);
137  if(p_mode != PSocketMode::NO_MOCK){
138  b &= _TMockBackend::isConnected(p_mockSocket);
139  }
140  if(p_mode != PSocketMode::MOCK){
141  b &= _TBackend::isConnected(p_socket);
142  }
143  return b;
144 }
145 
147 
149 template<typename _TBackend, typename _TMockBackend>
151  p_mode = mode;
152 }
153 
154 
155 #endif
156 
157 
158 
PGenericSocket(PSocketMode::PSocketMode mode)
Default constructor of PGenericSocket.
void close()
Close the socket.
bool recvMsg(typename _TBackend::Message &msg, PRecvFlag::PRecvFlag flag)
Recieve message from the given socket.
bool isConnected() const
Say if the Socket is connected.
virtual ~PGenericSocket()
Destructor of PGenericSocket.
bool sendMsg(typename _TBackend::Message &msg, PSendFlag::PSendFlag flag)
Send message on the given socket.
bool createClientSocket(const typename _TBackend::Param &param, const typename _TMockBackend::Param &mockParam)
Create a client socket.
void initialisationPGenericSocket(PSocketMode::PSocketMode mode)
Initialisation function of the class PGenericSocket.
bool createServerSocket(const typename _TBackend::Param &param, const typename _TMockBackend::Param &mockParam)
Create a server socket.
PRecvFlag
describe the recieving flag of the Socket
Definition: PSocketFlag.h:20
PSendFlag
describe the sending flag of the Socket
Definition: PSocketFlag.h:12
PSocketMode
describe the mode of the Socket
Definition: PSocketMode.h:12