コード例 #1
0
/**
* 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);
}
コード例 #2
0
ファイル: mainthread.cpp プロジェクト: slim89/KVP-Server
//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;
        }
    }
}
コード例 #3
0
ファイル: ftp.c プロジェクト: mouradmourafiq/mftp
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)
コード例 #4
0
ファイル: mainthread.cpp プロジェクト: slim89/KVP-Server
//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)));
}
コード例 #5
0
ファイル: client.c プロジェクト: guigui33/projetC
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;
}
コード例 #6
0
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(&notifierJoueurs);
  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);

    }
}
コード例 #7
0
ファイル: moc_webPage.cpp プロジェクト: ProgVal/Naveo
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;
}