PhoenixZMQ  2.0.0
Library which integrates zeromq use in Phoenix
main.cpp
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 #include <unistd.h>
8 
9 #include <fstream>
10 #include <iostream>
11 #include <thread>
12 
13 #include "data_stream_assert.h"
14 #include "PGenericSocketManager.h"
15 
16 
20 
21 
23 
28 void threadSendData(PSocketMode::PSocketMode mode, size_t nbMessage, const std::string & address, size_t port){
29  SocketManager manager(mode); //Mock mode
30  data_stream_assert(manager.addServerSocket("Alice",
31  Backend::server(address, port),
32  Mock::server(address, port, true, "./")));
33  data_stream_assert(manager.isConnected("Alice"));
34  for(size_t i(0lu); i < nbMessage; ++i){
35  data_stream_assert(manager.sendData("Alice", i));
36  std::cout << "message n°"<<i<<", Send value " << i << std::endl;
37  }
38 }
39 
41 
46 void threadRecievedData(PSocketMode::PSocketMode mode, const std::string & address, size_t nbMessage, size_t port){
47  SocketManager manager(mode); //Mock mode
48  data_stream_assert(manager.addClientSocket("Bob",
49  Backend::client(address, port),
50  Mock::client(address, port, false, "./")));
51  size_t i(0lu);
52  while(i < nbMessage){
53  size_t value(0lu);
54  if(mode == PSocketMode::NO_MOCK){
55  data_stream_assert(!manager.recvData("Bob", value));
56  }else{
57  data_stream_assert(manager.recvData("Bob", value));
58  }
59  ++i;
60  }
61 }
62 
64 
67  size_t nbMessage(10lu), port(3390lu);
68  std::string hostName("localhost");
69  threadSendData(mode, nbMessage, hostName, port);
70  threadRecievedData(mode, hostName, nbMessage, port);
71 }
72 
73 
75 
80 void threadSendMessage(PSocketMode::PSocketMode mode, size_t nbMessage, const std::string & address, size_t port){
81  SocketManager manager(mode); //Mock mode
82  data_stream_assert(manager.addServerSocket("Alice",
83  Backend::server(address, port),
84  Mock::server(address, port, true, "./testMessage")));
85  data_stream_assert(manager.isConnected("Alice"));
86  for(size_t i(0lu); i < nbMessage; ++i){
87  Backend::Message msg;
88  msg.push_back(i + 1);
89  msg.push_back(i + 2);
90  msg.push_back(i + 3);
91 
92  data_stream_assert(manager.sendMsg("Alice", msg));
93  std::cout << "message n°"<<i<<", Send message " << i << std::endl;
94  }
95 }
96 
98 
103 void threadRecievedMessage(PSocketMode::PSocketMode mode, const std::string & address, size_t nbMessage, size_t port){
104  SocketManager manager(mode); //Mock mode
105  data_stream_assert(manager.addClientSocket("Bob",
106  Backend::client(address, port),
107  Mock::client(address, port, false, "./testMessage")));
108  size_t i(0lu);
109  while(i < nbMessage){
110  Backend::Message msg;
111  if(mode == PSocketMode::NO_MOCK){
112  data_stream_assert(!manager.recvMsg("Bob", msg));
113  }else{
114  data_stream_assert(manager.recvMsg("Bob", msg));
115  data_stream_assert(Backend::msgSize(msg) == 3lu);
116 
117  DataStreamIter data = Backend::msgData(msg);
118  data_stream_assert(data[0] == (char)i + 1);
119  data_stream_assert(data[1] == (char)i + 2);
120  data_stream_assert(data[2] == (char)i + 3);
121  }
122  ++i;
123  }
124 }
125 
127 
130  size_t nbMessage(10lu), port(3390lu);
131  std::string hostName("localhost");
132  threadSendMessage(mode, nbMessage, hostName, port);
133  threadRecievedMessage(mode, hostName, nbMessage, port);
134 }
135 
136 int main(int argc, char **argv){
139 
142  return 0;
143 }
int main(int argc, char **argv)
Definition: main.cpp:85
SocketManager::Backend Backend
Definition: main.cpp:18
void threadRecievedMessage(PSocketMode::PSocketMode mode, const std::string &address, size_t nbMessage, size_t port)
Recieved messages on socket.
Definition: main.cpp:103
SocketManager::Mock Mock
Definition: main.cpp:19
void testMockSocket(PSocketMode::PSocketMode mode)
Launch the process.
Definition: main.cpp:66
PGenericSocketManager< std::string, PEmptyBackend, PMockBackend > SocketManager
Definition: main.cpp:17
void threadSendData(PSocketMode::PSocketMode mode, size_t nbMessage, const std::string &address, size_t port)
Send messages on socket.
Definition: main.cpp:28
void threadSendMessage(PSocketMode::PSocketMode mode, size_t nbMessage, const std::string &address, size_t port)
Send messages on socket.
Definition: main.cpp:80
void threadRecievedData(PSocketMode::PSocketMode mode, const std::string &address, size_t nbMessage, size_t port)
Recieved messages on socket.
Definition: main.cpp:46
void testMockSocketMessage(PSocketMode::PSocketMode mode)
Launch the process.
Definition: main.cpp:129
Socket manager for PGenericSocket.
bool recvData(const _TSocketKey &name, U &data, PRecvFlag::PRecvFlag flag=PRecvFlag::BLOCK)
Recieve data from the given socket.
bool isConnected(const _TSocketKey &name) const
Say if the given socket is connected.
bool addServerSocket(const _TSocketKey &name, const typename _TBackend::Param &param, const typename _TMockBackend::Param &mockParam)
Create a server socket.
bool sendMsg(const _TSocketKey &name, typename _TBackend::Message &msg, PSendFlag::PSendFlag flag=PSendFlag::BLOCK)
Send message on the given socket.
bool addClientSocket(const _TSocketKey &name, const typename _TBackend::Param &param, const typename _TMockBackend::Param &mockParam)
Create a client socket.
bool sendData(const _TSocketKey &name, const U &data, PSendFlag::PSendFlag flag=PSendFlag::BLOCK)
Send data on the given socket.
bool recvMsg(const _TSocketKey &name, typename _TBackend::Message &msg, PRecvFlag::PRecvFlag flag=PRecvFlag::BLOCK)
Recieve message from the given socket.
#define data_stream_assert(isOk)
DataStreamType * DataStreamIter
PSocketMode
describe the mode of the Socket
Definition: PSocketMode.h:12