PhoenixSocket  1.0.0
Library which integrates socket unix use in Phoenix
Loading...
Searching...
No Matches
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
15template<typename _TBackend, typename _TMockBackend>
19
21template<typename _TBackend, typename _TMockBackend>
25
27
31template<typename _TBackend, typename _TMockBackend>
32bool PGenericSocket<_TBackend, _TMockBackend>::createClientSocket(const typename _TBackend::Param & param, const typename _TMockBackend::Param & mockParam){
33 bool b(true);
35 b &= _TMockBackend::createClientSocket(p_mockSocket, mockParam);
36 }
38 b &= _TBackend::createClientSocket(p_socket, param);
39 }
40 return b;
41}
42
44
48template<typename _TBackend, typename _TMockBackend>
49bool PGenericSocket<_TBackend, _TMockBackend>::createServerSocket(const typename _TBackend::Param & param, const typename _TMockBackend::Param & mockParam){
50 bool b(true);
52 b &= _TMockBackend::createServerSocket(p_mockSocket, mockParam);
53 }
55 b &= _TBackend::createServerSocket(p_socket, param);
56 }
57 return b;
58}
59
61
67template<typename _TBackend, typename _TMockBackend>
68bool PGenericSocket<_TBackend, _TMockBackend>::createClientSocket(const std::string & host, size_t port, const typename _TBackend::Param & param, const std::string & mockPrefix, const typename _TMockBackend::Param & mockParam){
69 bool b(true);
70 _TMockBackend::setMockPrefix(p_mockSocket, mockPrefix);
71 _TMockBackend::setIsMockRecord(p_mockSocket, p_mode == PSocketMode::MOCK_RECORD);
72 b &= _TMockBackend::createClientSocket(p_mockSocket, host, port, mockParam);
73 b &= _TBackend::createClientSocket(p_socket, host, port, param);
74
75 return b;
76}
77
79
85template<typename _TBackend, typename _TMockBackend>
86bool PGenericSocket<_TBackend, _TMockBackend>::createServerSocket(const std::string & host, size_t port, const typename _TBackend::Param & param, const std::string & mockPrefix, const typename _TMockBackend::Param & mockParam){
87 bool b(true);
88 _TMockBackend::setMockPrefix(p_mockSocket, mockPrefix);
89 _TMockBackend::setIsMockRecord(p_mockSocket, p_mode == PSocketMode::MOCK_RECORD);
90 b &= _TMockBackend::createServerSocket(p_mockSocket, host, port, mockParam);
91 b &= _TBackend::createServerSocket(p_socket, host, port, param);
92
93 return b;
94}
95
97
99template<typename _TBackend, typename _TMockBackend>
101 p_mode = mode;
102 _TMockBackend::setIsMockRecord(p_mockSocket, mode == PSocketMode::MOCK_RECORD);
103}
104
106
110template<typename _TBackend, typename _TMockBackend>
112 bool b(true);
113 //This is normal to call the mock backend on a send, because it will check if the send message is the expected one
114 //by respected to the recorded mock
116 typename _TMockBackend::Message vecTmp;
117 _TBackend::msgToMock(vecTmp, msg);
118 b &= _TMockBackend::send(p_mockSocket, vecTmp, flag);
119 }
120
121 // If we dont test if b is true, we will always send the message even if the mock backend is not connected
122 // I don't know if it is a good idea to do so
123 // 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
124 // Because the boolean value is not checked. So the real backend could have sent corretly the message and the mock not....
125
126 if(p_mode != PSocketMode::MOCK && b){
127 b &= _TBackend::send(p_socket, msg, flag);
128 }
129 return b;
130}
131
133
137template<typename _TBackend, typename _TMockBackend>
139 bool b(true);
140 if(p_mode == PSocketMode::NO_MOCK){ //Normal mode
141 b &= _TBackend::recv(p_socket, msg, flag);
142 }else if(p_mode == PSocketMode::MOCK){ //Mock mode
143 typename _TMockBackend::Message msgMock;
144 b &= _TMockBackend::recv(p_mockSocket, msgMock, flag);
145 if(b){
146 _TBackend::mockToMsg(msg, msgMock);
147 }
148 }else{ //Mock record mode
149 b &= _TBackend::recv(p_socket, msg, flag);
150 if(b){
151 typename _TMockBackend::Message msgMock;
152 _TBackend::msgToMock(msgMock, msg);
153 b &= _TMockBackend::recv(p_mockSocket, msgMock, flag);
154 }
155 else {
156 typename _TMockBackend::Message empty_msg;
157 b &= _TMockBackend::recv(p_mockSocket, empty_msg, flag);
158 }
159 }
160 return b;
161}
162
164template<typename _TBackend, typename _TMockBackend>
166 _TMockBackend::close(p_mockSocket);
167 _TBackend::close(p_socket);
168}
169
171
173template<typename _TBackend, typename _TMockBackend>
175 bool b(true);
177 b &= _TMockBackend::isConnected(p_mockSocket);
178 }
180 b &= _TBackend::isConnected(p_socket);
181 }
182 return b;
183}
184
186
188template<typename _TBackend, typename _TMockBackend>
192
193
194#endif
195
196
197
PGenericSocket(PSocketMode::PSocketMode mode)
Default constructor of PGenericSocket.
void close()
Close the socket.
_TMockBackend::Socket p_mockSocket
Socket to be used with the mock backend.
bool recvMsg(typename _TBackend::Message &msg, PRecvFlag::PRecvFlag flag)
Recieve message from the given socket.
_TBackend::Socket p_socket
Socket to be used with the classical backend.
bool isConnected() const
Say if the Socket is connected.
virtual ~PGenericSocket()
Destructor of PGenericSocket.
PSocketMode::PSocketMode p_mode
Mode of the Socket (no mock, mock, mock_record)
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.
void setMode(PSocketMode::PSocketMode mode)
Set the mode of the generic 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