Exemple #1
0
void gestion_menu_diff(liste_dif * tmp,int flag){
    printf("ETAPE 1");
    int nb=length(tmp);
    liste_dif ** selection = (menu_diffuseurs(tmp,nb));
    printf("ETAPE 2");
    
    liste_dif * lst;
    
    if(selection !=NULL){
        clear_liste(&liste_tmp);
       lst=*selection;
    }else{
        return;
    }
    breakpointe();
    
    switch (menu_action_diff(flag)) {
        case 0:
            while(lst!=NULL) {// ajout a la liste de lecture
                init_sockUDP(lst->diff);
                pthread_t * th = malloc(sizeof(pthread_t));
                lst->diff->th=th;
                pthread_create(th, NULL, run_lecture, lst->diff);
                lst=lst->suivant;
            }
            transfert_liste(*selection, &liste);
            break;
        case 1:
            diffuser_message(*selection);//pas tester
            break;
        case 2:
            display_old_mess(*selection);//pas tester
            break;
        case 3:
            break;
    }
     clear_liste(&liste_tmp);
}
void Channels::run()
{
    //Get a updated library
    try
    {
        vector<AddrStorage*> addr;
       // Client::synchronize(addr);
      if(addr.size()<1) 
          throw (Exception("There is no server active, unable ton find a library.",__LINE__));

           // _lib = Client::get_library(*(addr[0]));

            //Client::disconnect(addr);
    }
    catch(Exception e)
    {
            //No other server is running, lib stay empty
    }
//Initialization of socket descriptor
cout<<"mon adresse est "<<monAdresse()<<"\n";
    fd_set readfds;
    int max = 0;
    FD_ZERO(&readfds);
    for(int i=0;i<_n_socks;i++)
    {
        FD_SET(_sockets[i], &readfds);
        if(_sockets[i]>max) 
            max = _sockets[i];
    }
    char *buf = new char[MAXLEN];
    AddrStorage *addr = new AddrStorage[MAXSOCK];
//Start server (infinite loop)
    while(_run)
    {
        if(select(max+1, &readfds, NULL, NULL, NULL)>0)
        {
            for(int i = 0; i< _n_socks; i++)
            {
                if(FD_ISSET(_sockets[i], &readfds))
                {   char * buffer = new char[MAXLEN];
                   // cout <<"nommbre de connecte avant est "<<actuel<<"\n";
                    lire_message(&addr[i],buf,_sockets[i]);
                    actuel++;
                    //char * config = new char [MAXLEN];
                   // cout<<"Fichier de configuration pour ce client \n";
                    //fgets(config,MAXLEN,stdin);
                   // Client nouveaux(config);
                    //AddrStorage adresse = nouveaux.monAdresse();
                   // cout <<"nommbre de connecte apres est "<<actuel<<"\n";
                    chnl.clients[i] = addr[i];;
                    cout<<"Element du canal \n "<< addr[i] <<"\n  Socket associé  \n "<<_sockets[i]<<"\n";

                    if(&addr[i]!=NULL)
                      diffuser_message(_sockets[i],chnl,addr[i],buffer);
                    delete [] buffer;
               }
            }
        }
            else throw (Exception("Server::server : select failed.",__LINE__));
    }
}