// generated 2006/3/17 14:40:21 CET by campeur@gnappy.(none) // using glademm V2.6.0 // // newer (non customized) versions of this file go to window1.cc_new // This file is for your program, I won't touch it again! #include "config.h" #include "window1.hh" window1::window1(){ buff=textview->get_buffer() ; //mise en relation entre buff et textview buff->set_text("Serveur Aznur Project(c)\r\npar Campeur\r\n") ; //Ecriture num_ligne = 3 ; num_car = 0 ; end = 0 ; // buffTemp = new char[50] ; iter = buff->get_iter_at_line(num_ligne) ; //récupere l'emplacement du texte } //--------------------------------------------------------------------- window1::~window1(){ close(sockS) ; close(sockC) ; } //--------------------------------------------------------------------- void window1::on_enregistrer_sous1_activate(){ } //--------------------------------------------------------------------- void window1::on_quitter1_activate(){ close(sockS) ; close(sockC) ; gtk_main_quit () ; // Ferme la fenetre } //--------------------------------------------------------------------- void window1::on_btnClose_clicked(){ close(sockS) ; close(sockC) ; gtk_main_quit () ; // Ferme la fenetre } //--------------------------------------------------------------------- void window1::on_supprimer1_activate(){ } //--------------------------------------------------------------------- void window1::on____propos1_activate(){ } //--------------------------------------------------------------------- void window1::on_btnEnregistrer_clicked(){ } //--------------------------------------------------------------------- void window1::on_BtnDemarrer_clicked(){ int errThAff, errThCnx ; void * errt ; sem_init (&sema, 0, 0); errThAff = pthread_create (&thAffichage, NULL, processAff, NULL) ; errThCnx = pthread_create (&thConnec, NULL, processCnx, NULL) ; (void)pthread_join (thAffichage, &errt); (void)pthread_join (thConnec, &errt); }//Fin || argument of typr 'void*(window1::)(void*)' does not match 'void*(*)(void*) //--------------------------------------------------------------------- void window1::on_BtnArreter_clicked(){ close(sockS) ; close(sockC) ; } //--------------------------------------------------------------------- void window1::ajouterLigne(){ num_ligne ++ ; iter = buff->get_iter_at_line(num_ligne) ; //récupere l'emplacement du texte } //--------------------------------------------------------------------- void window1::ajouterCar(){ num_car ++ ; iter = buff->get_iter_at_line_offset(num_ligne, num_car) ; } //--------------------------------------------------------------------- void * processAff(void * arg){ window1 objWin ; while(1) { sem_wait(&sema); switch (err) { case 1 : buff -> insert(iter, "Erreur de création de socket\r\n") ; case 2 : buff -> insert(iter, "Socket.......... OK\r\n") ; case 3 : buff -> insert(iter, "Erreur de bind\r\n") ; case 4 : buff -> insert(iter, "Bind............. OK\r\n") ; case 5 : buff -> insert(iter, "Erreur de listen\r\n") ; case 6 : buff -> insert(iter, "Listen........... OK\r\n") ; /* case 7 case 8 case 9 */ } objWin.ajouterLigne() ; } pthread_exit (0); } //--------------------------------------------------------------------- void * processCnx(void * arg){ window1 objWin ; sockS = socket(AF_INET, SOCK_STREAM, 0); //Création socket server if (sockS < 0 ){ //erreur de création sockErreur = -1 ; //Erreur dans la création du socket err = 1 ; sem_post (&sema);//appel du thread affichage (1) }else{ // Socket ok sockErreur = 0 ; //socket ok err = 2 ; sem_post(&sema) ;//appel du thread affichage (2) bzero(&idServer,sizeof(idServer)); //mise a 0 de 'idServer' idServer.sin_family = AF_INET; idServer.sin_port = htons(PORT_ECOUTE); idServer.sin_addr.s_addr = htonl(INADDR_ANY); if(bind(sockS,(sockaddr *)&idServer,sizeof(idServer)) < 0 ){ sockErreur = -1 ; //Erreur dans le bind err = 3 ; sem_post(&sema) ; //appel du thread affichage (3) }else{ //bind ok sockErreur = 0 ; //socket ok err = 4 ; sem_post(&sema) ;//appel du thread affichage (4) if((listen(sockS, 20)) < 0 ){ sockErreur = -1 ; //Erreur dans le listen err = 5 ; sem_post(&sema) ;//appel du thread affichage (5) }else{ //listen ok sockErreur = 0 ; //socket ok err = 6 ; sem_post(&sema) ;//appel du thread affichage (6) sockC = -1 ; while(sockC == -1) { taille = sizeof(idClient) ; sockC = accept(sockS,(sockaddr *)&idClient,&taille) ; } //Fin While if(sockC != -1 ){ //Tant qu'il n'y a pas de cnx send(sockC,"Connecter!\r\n", 14, 0) ; //On dit au client qu'il est connecter while(recv(sockC, buffTemp, 20, 0) < 0){ //tant qu'on ne recoi rien buff -> insert(iter, ".") ; objWin.ajouterCar() ; } objWin.ajouterLigne() ; buff -> insert(iter, buffTemp) ; } //Fin IF }//Fin du test sur le listen }//Fin du test sur le bind }//Fin du test sur le socket pthread_exit (0); }