/** * Thread lancé dès qu'un client a été accept() par le server. Il va gérer la * la partie authentification puis oriente le client. **/ void* th_new_client(void* param) { data_t data(NULL); if(param != NULL) { data = (data_t) param; } else { perror("Error : param value"); } struct controller_infos controller_infos; int* infos_client(NULL); int statusClient(-1); infos_client = authentification(data->descripteur,data->nb_client,data->ptr_client_list); cout << "Status : " << infos_client[0] << " Indice : "<< infos_client[1] << endl; statusClient = infos_client[0]; if(statusClient == 0) { cout << "Erreur identifiants"<<endl; close(data->descripteur); } else { pthread_t idThread; switch(statusClient) { case CLIENT_OK : cout << "C'est un client !"<< endl; close(data->descripteur); break; case CLIENT_OK_DISPO : cout << "C'est un client, rapport dispo !"<< endl; if(pthread_create(&idThread,NULL,th_employee_management, (void*)data->ptr_client_list[infos_client[1]] )!= 0) { perror("Erreur création thread employee"); } pthread_join(idThread, NULL); break; case CONTROLEUR_OK : cout << "C'est un controleur !"<< endl; controller_infos.controller = data->ptr_client_list[infos_client[1]]; controller_infos.data = data; if(pthread_create(&idThread,NULL,th_controller_management, (void*)&controller_infos)!= 0) { perror("Erreur création thread controller"); } pthread_join(idThread, NULL); break; default : cerr << "Petit souci switch(statusClient)" <<endl; close(data->descripteur); } if(infos_client != NULL) free(infos_client); } pthread_exit(NULL); }
//READ---------------------------------------------------------------------------------- void MainThread::Read() { qCritical()<<"READ "; QTcpSocket* sock= ((QTcpSocket*)(this->sender())); QByteArray array=sock->readAll(); QString buffer = array; int id; id=cl->ID(sock); qCritical()<<buffer; if (!buffer.contains("#/")) { sock->disconnectFromHost(); return; } QStringList strList=buffer.split("#/"); if (strList.isEmpty()) return; QStringListIterator iter(strList); while(iter.hasNext()) { QString buf=iter.next(); if( buf.contains(structure.prefix+ structure.key+ structure.separator+structure.login+ structure.prefix) ) { qCritical()<<"RES2"; QSharedPointer<IMessage> mes(new Message(buf)); mes->AddPart(keys.s,QString::number(cl->ID(sock))); emit authentification(mes); return; } if( buf.contains(structure.prefix+structure.key+structure.separator+structure.send+structure.prefix)) { QSharedPointer<IMessage> mes(new Message(buf)); mes->AddPart(keys.s,QString::number(cl->ID(sock))); emit send(mes); return; } if( buf.contains(structure.prefix+structure.key+structure.separator+structure.addfriend+structure.prefix)) { addFriend(sock, id, buf); return; } if( buf.contains(structure.prefix+structure.key+structure.separator+structure.removefriend+structure.prefix)) { removeFriend(sock, id, buf); return; } } }
int main(int argc, char *argv[]) { int sockfd, numbytes; // ......... struct hostent *he; //........... struct sockaddr_in their_addr; //......... /*if (argc != 3) { fprintf(stderr,"usage: client hostname\n"); exit(1); }*/ if ((he=gethostbyname(argv[1])) == NULL) { // ......... perror("gethostbyname"); exit(1); } if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { // ......... perror("socket"); exit(1); } their_addr.sin_family = AF_INET; // ......... their_addr.sin_port = htons(PORT); // ......... their_addr.sin_addr = *((struct in_addr *) he->h_addr); memset(&(their_addr.sin_zero), '\0', 8); // ......... if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1) { // ......... perror("connect"); exit(1); } /* Authentification */ if(strcmp(authentification(sockfd),"ok")!=0) { printf("Login ou Password erroné..\n"); goto fin; } char op[45]; deb: printf("\n%s >",argv[0]); scanf("%s",op); if(strcmp(op,"bye")==0) { send(sockfd,"bye", 200, 0); goto fin; } if(strcmp(op,"get")==0) get(sockfd); else if(strcmp(op,"put")==0)
//INIT-------------------------------------------------------------------------- void MainThread::Init() { tcpServer.setMaxPendingConnections(100); if (!tcpServer.listen(QHostAddress::Any, 3425)) { qCritical()<<"Server Listen Error"; app->exit(1); return; } db = QSqlDatabase::addDatabase("QSQLITE"); base=QSharedPointer <ContactsBase>(new ContactsBase(&db)); base->connectDB(); cl = QSharedPointer <ActiveClients>(new ActiveClients()); //study our preParser keys.s="s"; keys.r="r"; keys.m="m"; keys.l="l"; keys.p="p"; keys.o="o"; keys.id="id"; type.typeLog="log"; type.typeSend="send"; structure.separator ="/"; structure.prefix ="#"; structure.key= "type"; structure.addfriend="addfr"; structure.removefriend="rfr"; structure.login= "******"; structure.send="send"; LogReg_thread = QSharedPointer <LogRegThread>(new LogRegThread(keys, base)); LogReg_thread->start(); connect(&tcpServer, SIGNAL(newConnection()),this, SLOT(AcceptConnection()),Qt::QueuedConnection); connect(this,SIGNAL(authentification(QSharedPointer<IMessage>)),LogReg_thread.data(),SLOT(ThreadMain(QSharedPointer<IMessage>))); connect(this,SIGNAL(send(QSharedPointer<IMessage>)),this,SLOT(Send(QSharedPointer<IMessage>))); connect(LogReg_thread.data(),SIGNAL(write(int,QString)),this,SLOT(Write(int,QString))); connect(LogReg_thread.data(),SIGNAL(newuser(int,UserItem)),this,SLOT(NewUser(int,UserItem))); }
void menuConnex() { size_t fin=0;//boolean de fin de boucle char choix[2];//recupere le choix de l'utilisateur int retour;//retour de fonction char idUtilisateur[6];//l'identifiant de l'utilisateur while(!fin) { printf("-------Menu-------\n"); printf("1)Authentification\n2)Création de compte\n0)quitter\n"); printf("choix: "); if(fgets(choix,2,stdin)==NULL) { perror("probleme dans l'entrée choix\n"); exit(1); // on quitte le programme } supprCara(choix);// on suppr le \n et on vide le buffer switch(choix[0]) { case '1': retour = authentification(idUtilisateur); if(retour==1) { printf("****connexion****\n"); menuUtilisateur(idUtilisateur); } else if(retour==0) { printf("L'identifiant et le mot de passe entrés par l'utilisateur ne sont pas corrects.\n"); } else { printf("Le serveur a rencontré un problème.\n"); } break; case '2': retour=creationDeCompte(); if(retour==1) { printf("Fin de l'enregistrement.\n"); } else if(retour==0) { printf("les informations sont incorrectes.\n"); } else { printf("Le serveur a rencontré un problème, veuillez recommencer.\n"); } break; case '0': EmissionBinaire("Deco\n",5); fin=1; break; default: printf("Erreur dans le choix, recommencez.\n"); break; } } return; }
void* handlerConnexion(void *args) { int sock=*(int *)args; int read_size; char *reponse; char *message,client_message[2000]; char **decouper; Dessin *dessin=malloc(sizeof(*dessin)); dessin->couleur="0/0/0"; dessin->size="1"; char *size="1"; char *couleur="0/0/0"; int i=0; if((read_size=recv(sock,client_message,2000,0))>0) { decouper=(char **)fStrSplit(client_message,"/"); if(strcmp(decouper[0],"CONNECT")==0) { pthread_mutex_lock(&mutex); nbConnecter++; pthread_mutex_unlock(&mutex); creerJoueur(decouper[1],sock,mesJoueurs); reponse=(char *)malloc(sizeof(char *)); strcat(reponse,"WELCOME/"); strcat(reponse,decouper[1]); strcat(reponse,"/\n"); printf("la reponse est %s \n",reponse); write(sock,reponse,strlen(reponse)); notifierConnexion(mesJoueurs,decouper[1],sock); } if(strcmp(decouper[0],"SPECTATOR")==0) { printf("il y'a un spectateur qui veut se connecter \n"); mesSpectateurs[nbSpectateur]=sock; pthread_mutex_lock(&mutex); nbSpectateur++; pthread_mutex_unlock(&mutex); } if(strcmp(decouper[0],"REGISTER")==0) { int insc=inscription(decouper[1],decouper[2]); if(insc==0) { char *reponse=(char *)malloc(sizeof(char *)); strcat(reponse,"WELCOME/"); strcat(reponse,decouper[1]); strcat(reponse,"/\n"); close(sock); } else { char *access="ACCESSDENIED/\n"; write(sock,access,strlen(access)); close(sock); } } if(strcmp(decouper[0],"LOGIN")==0) { int auth=authentification(decouper[1],decouper[2]); if(auth==0) { printf("authentification reussi \n"); pthread_mutex_lock(&mutex); nbConnecter++; pthread_mutex_unlock(&mutex); creerJoueur(decouper[1],sock,mesJoueurs); reponse=(char *)malloc(sizeof(char *)); strcat(reponse,"WELCOME/"); strcat(reponse,decouper[1]); strcat(reponse,"/\n"); printf("la reponse est %s \n",reponse); write(sock,reponse,strlen(reponse)); notifierConnexion(mesJoueurs,decouper[1],sock); } else { char *access="ACCESSDENIED/\n"; write(sock,access,strlen(access)); close(sock); printf("echec authentification \n"); } } } while(nbConnecter!=MaxJoueur) { } pthread_cond_signal(¬ifierJoueurs); while(tour!=0) { while((read_size=recv(sock,client_message,2000,0))>0) {printf("une commande est venu qd meme \n"); char** decouper=malloc(sizeof(char *)); decouper=(char **)fStrSplit(client_message,"/"); printf("command recu :%s \n",client_message); if(strcmp(decouper[0],"SET_COLOR")==0) { printf("il veut definir la couleur \n"); char *maCouleur; maCouleur=(char*)malloc(sizeof(char *)); strcat((char *)maCouleur,decouper[1]); strcat(maCouleur,"/"); strcat(maCouleur,decouper[2]); strcat(maCouleur,"/"); strcat(maCouleur,decouper[3]); dessin->couleur=maCouleur; } if(strcmp(decouper[0],"EXIT")==0) { deconnexionJoueur(mesJoueurs,sock,decouper[1]); supprimerJoueur(mesJoueurs,sock); if(dessinateur->socket_id==sock) {close(sock); finRound(mesJoueurs,buffer,"NO_ONE"); setDessinateur(mesJoueurs); if(fgets(buffer,TAILLE_BUFFER,monFichier)!=NULL) { int n=strlen(buffer); buffer[n-1]='\0'; aDessiner=buffer; printf(" le mot a dessiner est %s lol ",aDessiner); EnvoyerRole(mesJoueurs,buffer); flagTimeout=0; break; } } close(sock); } if(strcmp(decouper[0],"GUESS")==0) { printf("veut deviner \n"); if(strcmp(decouper[1],aDessiner)==0) { /*EnvoyerMotDeviner(mesJoueurs,decouper[1],sock,1);*/ printf("bien deviner mon pote \n"); DeclencherMotTrouver(mesJoueurs,sock); if(flagScore==0) { setScore(mesJoueurs,sock,10); setScore(mesJoueurs,dessinateur->socket_id,10); flagScore++; } else { setScore(mesJoueurs,sock,10-flagScore); setScore(mesJoueurs,dessinateur->socket_id,1); flagScore++; } if(flagTimeout==0) { declencherTimeOut(mesJoueurs); flagTimeout=1; sleep(timeout); if(flagPass==0) { nomGagnant=getNomJoueur(mesJoueurs,sock); EnvoyerScore(mesJoueurs); finRound(mesJoueurs,buffer,nomGagnant); setDessinateur(mesJoueurs); if(fgets(buffer,TAILLE_BUFFER,monFichier)!=NULL) { int n=strlen(buffer); buffer[n-1]='\0'; aDessiner=buffer; printf(" le mot a dessiner est %s lol ",aDessiner); EnvoyerRole(mesJoueurs,buffer); flagTimeout=0; break; } } else { finRound(mesJoueurs,buffer,"NO_ONE"); setDessinateur(mesJoueurs); if(fgets(buffer,TAILLE_BUFFER,monFichier)!=NULL) { int n=strlen(buffer); buffer[n-1]='\0'; aDessiner=buffer; printf(" le mot a dessiner est %s lol ",aDessiner); EnvoyerRole(mesJoueurs,buffer); flagTimeout=0; break; } } } } else { EnvoyerMotDeviner(mesJoueurs,decouper[1],sock,0); printf("incorrect le mot deviner \n"); } } if(strcmp(decouper[0],"TALK")==0) { Talk(mesJoueurs,sock,decouper[1]); } if(strcmp(decouper[0],"PASS")==0) { if(flagMotTrouver==0) { /*personne n'a trouver alors on abondonne tranquillement */ finRound(mesJoueurs,buffer,"NO_ONE"); setDessinateur(mesJoueurs); if(fgets(buffer,TAILLE_BUFFER,monFichier)!=NULL) { int n=strlen(buffer); buffer[n-1]='\0'; aDessiner=buffer; printf(" le mot a dessiner est %s lol ",aDessiner); EnvoyerRole(mesJoueurs,buffer); flagTimeout=0; break; } } else { /*quelqu'un a deja trouver on attend la fin du timeout */ flagPass=1; } } if(strcmp(decouper[0],"CHEAT")==0) { pthread_mutex_lock(&mutex); nbCheat++; pthread_mutex_unlock(&mutex); if(nbCheat==3) { finRound(mesJoueurs,buffer,"NO_ONE"); setDessinateur(mesJoueurs); if(fgets(buffer,TAILLE_BUFFER,monFichier)!=NULL) { int n=strlen(buffer); buffer[n-1]='\0'; aDessiner=buffer; printf(" le mot a dessiner est %s lol ",aDessiner); EnvoyerRole(mesJoueurs,buffer); break; } } } if(strcmp(decouper[0],"SET_LINE")==0) { printf("il veut faire un setLine \n"); char *maLigne; maLigne=(char *)malloc(sizeof(char *)); strcat(maLigne,decouper[1]); strcat(maLigne,"/"); strcat(maLigne,decouper[2]); strcat(maLigne,"/"); strcat(maLigne,decouper[3]); strcat(maLigne,"/"); strcat(maLigne,decouper[4]); /*dessin->ligne=maLigne;*/ EnvoyerDessin(mesJoueurs,maLigne,size,couleur); } if(strcmp(decouper[0],"SET_COURBE")==0) { printf("il veut faire une courbe \n"); char *maLigne; maLigne=(char *)malloc(sizeof(char *)); strcat(maLigne,decouper[1]); strcat(maLigne,"/"); strcat(maLigne,decouper[2]); strcat(maLigne,"/"); strcat(maLigne,decouper[3]); strcat(maLigne,"/"); strcat(maLigne,decouper[4]); strcat(maLigne,"/"); strcat(maLigne,decouper[5]); strcat(maLigne,"/"); strcat(maLigne,decouper[6]); strcat(maLigne,"/"); strcat(maLigne,decouper[7]); strcat(maLigne,"/"); strcat(maLigne,decouper[8]); EnvoyerCourbe(mesJoueurs,maLigne,size,couleur); /* dessin->ligne=maLigne; flagCourbe=1; printf(" la courbe est %s \n",dessin->ligne);*/ } if(strcmp(decouper[0],"SET_SIZE")==0) { printf("il veut definir la taille \n"); dessin->size=decouper[1]; } if(strcmp(decouper[0],"SET_TEST")==0) { printf("on fait le test \n"); } /* if(dessin->ligne!=NULL) { printf("le dessin est pres on l'envoi maintenant \n"); if(flagCourbe==1) { EnvoyerCourbe(mesJoueurs,dessin); flagCourbe=0; } else { EnvoyerDessin(mesJoueurs,dessin); } dessin->ligne="0/0/0/0"; }*/ } pthread_mutex_lock(&mutex); tour--; pthread_mutex_unlock(&mutex); printf("round numero %d \n",tour); } }
int webPage::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QMainWindow::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: loading((*reinterpret_cast< QString(*)>(_a[1]))); break; case 1: isLoading((*reinterpret_cast< QPixmap(*)>(_a[1]))); break; case 2: titleChanged((*reinterpret_cast< QString(*)>(_a[1]))); break; case 3: pageChanged((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2]))); break; case 4: showSources((*reinterpret_cast< QString(*)>(_a[1]))); break; case 5: speedDial(); break; case 6: needPrint((*reinterpret_cast< QPrinter*(*)>(_a[1]))); break; case 7: openTab((*reinterpret_cast< webPage*(*)>(_a[1]))); break; case 8: setFullScreen((*reinterpret_cast< bool(*)>(_a[1]))); break; case 9: startLoading(); break; case 10: finishLoading((*reinterpret_cast< bool(*)>(_a[1]))); break; case 11: changeTitle((*reinterpret_cast< QString(*)>(_a[1]))); break; case 12: changeUrl((*reinterpret_cast< QUrl(*)>(_a[1]))); break; case 13: goToHome(); break; case 14: loadUrl(); break; case 15: loadUrl((*reinterpret_cast< QUrl(*)>(_a[1]))); break; case 16: loadUrl((*reinterpret_cast< QString(*)>(_a[1]))); break; case 17: addToBookMark(); break; case 18: downloadFile((*reinterpret_cast< const QNetworkRequest(*)>(_a[1]))); break; case 19: downloadFile((*reinterpret_cast< QNetworkReply*(*)>(_a[1]))); break; case 20: loadBookMark(); break; case 21: showBookMark(); break; case 22: sources(); break; case 23: defineHome(); break; case 24: findNext(); break; case 25: findPrevious(); break; case 26: print(); break; case 27: createNewPage((*reinterpret_cast< WebView*(*)>(_a[1]))); break; case 28: createNewPage(); break; case 29: updateIcon(); break; case 30: copy(); break; case 31: authentification((*reinterpret_cast< QNetworkReply*(*)>(_a[1])),(*reinterpret_cast< QAuthenticator*(*)>(_a[2]))); break; case 32: inspectPage(); break; case 33: goToDial(); break; case 34: updateUrlIcon((*reinterpret_cast< QPixmap(*)>(_a[1]))); break; case 35: updateBookMark(); break; case 36: updateOptions(); break; case 37: showBar(); break; case 38: showPage(); break; case 39: showDial(); break; case 40: inCache(); break; case 41: showConsole(); break; case 42: zoomIn(); break; case 43: zoomOut(); break; case 44: restoreZoom(); break; case 45: savePage(); break; case 46: back(); break; case 47: forward(); break; default: ; } _id -= 48; } return _id; }