summaryrefslogtreecommitdiff
path: root/i/simulotron
diff options
context:
space:
mode:
Diffstat (limited to 'i/simulotron')
-rw-r--r--i/simulotron/src/gs/test_gs.cc280
-rw-r--r--i/simulotron/src/socket/socket_client.cc1
2 files changed, 130 insertions, 151 deletions
diff --git a/i/simulotron/src/gs/test_gs.cc b/i/simulotron/src/gs/test_gs.cc
index 7054354..0dc557a 100644
--- a/i/simulotron/src/gs/test_gs.cc
+++ b/i/simulotron/src/gs/test_gs.cc
@@ -51,168 +51,148 @@ long l1 = 465676;
long l2;
//threads
-pthread_t threadId[2];
+pthread_t threadId;
void * retour;
-int stateTh[2];
+int stateTh;
void * testGSServ(void * CaSertARien);
void * testGSClient(void * CaSertARien);
int main(void)
{
+ // Création de la socket serveur;
+ SocketServer sockServ(Address(4242));
+ // Mise en écoute du socket serveur
+ sockServ.listen(12);
+ // On crée le thread du client
int ret;
- ret = pthread_create(& threadId[0], NULL, testGSServ, NULL);
+ ret = pthread_create(& threadId, NULL, testGSClient, NULL);
if(ret != 0)
{
- std::cout << "CHIER: Echec thread serveur" << std::endl;
+ std::cout << "CHIER: Echec thread client" << std::endl;
return EXIT_FAILURE;
}
- ret = pthread_create(& threadId[1], NULL, testGSClient, NULL);
- if(ret != 0)
+ // Acceptation d'une connection
+ SocketClient sockFork(sockServ);
+ // Création du transmitter
+ GSTransmitter gst(sockFork);
+ // Reception des messages
+ // une string
+ GSMessage gsm;
+ if (gst.getGS(gsm) != 0)
+ throw std::runtime_error ("CHIER!! Reception mal passé");
+ if (strDepart != gsm.getGS())
{
- std::cout << "CHIER: Echec thread client" << std::endl;
- return EXIT_FAILURE;
+ std::cout << "CHIER String altéré\n"
+ << "Message d'origine: " << strDepart << "\n"
+ << "Message d'arrivé: " << gsm.getGS()
+ << std::endl;
+ return 1;
}
- pthread_join(threadId[0], &retour);
- stateTh[0] = (int) retour;
- pthread_join(threadId[1], &retour);
- stateTh[1] = (int) retour;
- if(stateTh[0] == 0 && stateTh[1] == 0)
- return 0;
- else
+ std::cout << "String OK" << std::endl;
+ // Un char
+ if (gst.getGS(gsm) != 0)
+ throw std::runtime_error ("CHIER!! Reception mal passé");
+ gsm.readGS(&b, sizeof(char));
+ if ( a != b)
+ {
+ std::cout << "CHIER Char altéré\n"
+ << "Message d'origine: " << a << "\n"
+ << "Message d'arrivé: " << b
+ << std::endl;
return 1;
-}
-
-void * testGSServ(void * CaSertARien)
-{
- try
+ }
+ std::cout << "Char OK" << std::endl;
+ // Un short
+ if (gst.getGS(gsm) != 0)
+ throw std::runtime_error ("CHIER!! Reception mal passé");
+ gsm.readGS(&s2, sizeof(char));
+ if ( s1 != s2)
{
- // Création de la socket serveur;
- SocketServer sockServ(Address(4242));
- // Mise en écoute du socket serveur
- sockServ.listen(12);
- // Acceptation d'une connection
- SocketClient sockFork(sockServ);
- // Création du transmitter
- GSTransmitter gst(sockFork);
- // Reception des messages
- // une string
- GSMessage gsm;
- if (gst.getGS(gsm) != 0)
- throw std::runtime_error ("CHIER!! Reception mal passé");
- if (strDepart != gsm.getGS())
- {
- std::cout << "CHIER String altéré\n"
- << "Message d'origine: " << strDepart << "\n"
- << "Message d'arrivé: " << gsm.getGS()
- << std::endl;
- return (void *)1;
- }
- std::cout << "String OK" << std::endl;
- // Un char
- if (gst.getGS(gsm) != 0)
- throw std::runtime_error ("CHIER!! Reception mal passé");
- gsm.readGS(&b, sizeof(char));
- if ( a != b)
- {
- std::cout << "CHIER Char altéré\n"
- << "Message d'origine: " << a << "\n"
- << "Message d'arrivé: " << b
- << std::endl;
- return (void *)1;
- }
- std::cout << "Char OK" << std::endl;
- // Un short
- if (gst.getGS(gsm) != 0)
- throw std::runtime_error ("CHIER!! Reception mal passé");
- gsm.readGS(&s2, sizeof(char));
- if ( s1 != s2)
- {
- std::cout << "CHIER Short altéré\n"
- << "Message d'origine: " << s1 << "\n"
- << "Message d'arrivé: " << s2
- << std::endl;
- return (void *)1;
- }
- std::cout << "Short OK" << std::endl;
- // Un int positif
- if (gst.getGS(gsm) != 0)
- throw std::runtime_error ("CHIER!! Reception mal passé");
- gsm.readGS(&i2, sizeof(char));
- if ( i1 != i2)
- {
- std::cout << "CHIER int positif altéré\n"
- << "Message d'origine: " << i1 << "\n"
- << "Message d'arrivé: " << i2
- << std::endl;
- return (void *)1;
- }
- std::cout << "int positif OK" << std::endl;
- // Un int negatif
- if (gst.getGS(gsm) != 0)
- throw std::runtime_error ("CHIER!! Reception mal passé");
- gsm.readGS(&i4, sizeof(char));
- if ( i3 != i4)
- {
- std::cout << "CHIER int negatif altéré\n"
- << "Message d'origine: " << i3 << "\n"
- << "Message d'arrivé: " << i4
- << std::endl;
- return (void *)1;
- }
- std::cout << "int negatif OK" << std::endl;
- // Un Long
- if (gst.getGS(gsm) != 0)
- throw std::runtime_error ("CHIER!! Reception mal passé");
- gsm.readGS(&l2, sizeof(char));
- if ( l1 != l2)
- {
- std::cout << "CHIER long altéré\n"
- << "Message d'origine: " << l1 << "\n"
- << "Message d'arrivé: " << l2
- << std::endl;
- return (void *)1;
- }
- std::cout << "int positif OK" << std::endl;
- // Un gros message
- if (gst.getGS(gsm) != 0)
- throw std::runtime_error ("CHIER!! Reception mal passé");
- gsm.readGS(&s2,sizeof(short));
- gsm.readGS(&l2,sizeof(long));
- gsm.readGS(&i4,sizeof(int));
- if ( s1 != s2)
- {
- std::cout << "CHIER Short altéré\n"
- << "Message d'origine: " << s1 << "\n"
- << "Message d'arrivé: " << s2
- << std::endl;
- return (void *)1;
- }
- if ( l1 != l2)
- {
- std::cout << "CHIER int positif altéré\n"
- << "Message d'origine: " << l1 << "\n"
- << "Message d'arrivé: " << l2
- << std::endl;
- return (void *)1;
- }
- if ( i3 != i4)
- {
- std::cout << "CHIER int negatif altéré\n"
- << "Message d'origine: " << i3 << "\n"
- << "Message d'arrivé: " << i4
- << std::endl;
- return (void *)1;
- }
- std::cout << "Gros message OK" << std::endl;
+ std::cout << "CHIER Short altéré\n"
+ << "Message d'origine: " << s1 << "\n"
+ << "Message d'arrivé: " << s2
+ << std::endl;
+ return 1;
}
- catch(std::exception & chier)
+ std::cout << "Short OK" << std::endl;
+ // Un int positif
+ if (gst.getGS(gsm) != 0)
+ throw std::runtime_error ("CHIER!! Reception mal passé");
+ gsm.readGS(&i2, sizeof(char));
+ if ( i1 != i2)
{
- std::cout << "CHIER !! Une exception a été lancé coté serveur!!" << std::endl;
- std::cout << chier.what() << std::endl;
- return (void *) 1;
+ std::cout << "CHIER int positif altéré\n"
+ << "Message d'origine: " << i1 << "\n"
+ << "Message d'arrivé: " << i2
+ << std::endl;
+ return 1;
}
- return (void *) 0;
+ std::cout << "int positif OK" << std::endl;
+ // Un int negatif
+ if (gst.getGS(gsm) != 0)
+ throw std::runtime_error ("CHIER!! Reception mal passé");
+ gsm.readGS(&i4, sizeof(char));
+ if ( i3 != i4)
+ {
+ std::cout << "CHIER int negatif altéré\n"
+ << "Message d'origine: " << i3 << "\n"
+ << "Message d'arrivé: " << i4
+ << std::endl;
+ return 1;
+ }
+ std::cout << "int negatif OK" << std::endl;
+ // Un Long
+ if (gst.getGS(gsm) != 0)
+ throw std::runtime_error ("CHIER!! Reception mal passé");
+ gsm.readGS(&l2, sizeof(char));
+ if ( l1 != l2)
+ {
+ std::cout << "CHIER long altéré\n"
+ << "Message d'origine: " << l1 << "\n"
+ << "Message d'arrivé: " << l2
+ << std::endl;
+ return 1;
+ }
+ std::cout << "int positif OK" << std::endl;
+ // Un gros message
+ if (gst.getGS(gsm) != 0)
+ throw std::runtime_error ("CHIER!! Reception mal passé");
+ gsm.readGS(&s2,sizeof(short));
+ gsm.readGS(&l2,sizeof(long));
+ gsm.readGS(&i4,sizeof(int));
+ if ( s1 != s2)
+ {
+ std::cout << "CHIER Short altéré\n"
+ << "Message d'origine: " << s1 << "\n"
+ << "Message d'arrivé: " << s2
+ << std::endl;
+ return 1;
+ }
+ if ( l1 != l2)
+ {
+ std::cout << "CHIER int positif altéré\n"
+ << "Message d'origine: " << l1 << "\n"
+ << "Message d'arrivé: " << l2
+ << std::endl;
+ return 1;
+ }
+ if ( i3 != i4)
+ {
+ std::cout << "CHIER int negatif altéré\n"
+ << "Message d'origine: " << i3 << "\n"
+ << "Message d'arrivé: " << i4
+ << std::endl;
+ return 1;
+ }
+ std::cout << "Gros message OK" << std::endl;
+ //On attend le thread client
+ pthread_join(threadId, &retour);
+ stateTh = (int) retour;
+ if(stateTh == 0)
+ return 0;
+ else
+ return 1;
}
void * testGSClient(void * CaSertARien)
@@ -226,7 +206,7 @@ void * testGSClient(void * CaSertARien)
// Création du transmitter
GSTransmitter gst(sockClient);
GSMessage g1,g2,g3,g4,g5,g6,g7;
- g1.writeGS(strDepart.c_str(), strDepart.size());
+ g1.writeGS(strDepart.data(), strDepart.size());
gst.putGS(g1);
g2.writeGS(&s1, sizeof(short));
gst.putGS(g2);
@@ -242,13 +222,13 @@ void * testGSClient(void * CaSertARien)
g6.writeGS(&i3, sizeof(int));
gst.putGS(g6);
std::cout << "Et pouf" << std::endl;
-
+
/*//tv
- timeval tv;
- tv.tv_sec = 20;
- tv.tv_usec = 0;
- select(1,NULL,NULL,NULL,&tv);
- */
+ timeval tv;
+ tv.tv_sec = 20;
+ tv.tv_usec = 0;
+ select(1,NULL,NULL,NULL,&tv);
+ */
}
catch(std::exception & chier)
diff --git a/i/simulotron/src/socket/socket_client.cc b/i/simulotron/src/socket/socket_client.cc
index 9099089..ef26e70 100644
--- a/i/simulotron/src/socket/socket_client.cc
+++ b/i/simulotron/src/socket/socket_client.cc
@@ -91,7 +91,6 @@ SocketClient::write (const std::string & str)
int size = str.size () - pos < BUFFER_SIZE - 1 ? str.size () - pos:BUFFER_SIZE - 1;
str.copy (buffer, size, pos);
pos += size;
- buffer[size] = 0;
retval = ::write (socket_, buffer, size);
if (retval < 0)
throw errno_exception ("SocketClient: erreur d'écriture (write()) ", errno);