1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
   | void * foncs_messages_monitoring (void *p_data)
{
   int numbytes;
   char s_buffer[MAX_BUF_SIZE];
   GtkTextBuffer *p_buffer = NULL;
   GtkTextIter i_end;
   gpointer p_st_data;
   _tab_s *p_tmp_tab_s = NULL;
   GList *p_list = NULL;
   fd_set fd_read;
 
   /* -------------------------------------
      Reception et traitement des messages
   */
   int i;
   int ret;
   while (1)
   {
      FD_ZERO (&fd_read);
 
      for (p_list = g_list_first (p_tab_srv_chan_list);
           p_list;
           p_list = p_list->next)
      {
         p_st_data = g_list_nth_data (p_list, i);
         p_tmp_tab_s = p_st_data;
 
         FD_SET (p_tmp_tab_s->sock, &fd_read);
      }
 
 
      p_list = NULL;
      p_st_data = NULL;
      p_tmp_tab_s = NULL;
 
 
      if ((ret = select (0, &fd_read, NULL, NULL, NULL)) < 0)
      {
         perror ("select");
      }
      else if (p_tab_srv_chan_list != NULL)
      {
         /* On boucle sur toute la liste chainee */
         i = 0;
         for (p_list = g_list_first (p_tab_srv_chan_list);
              p_list;
              p_list = p_list->next)
         {
            /* On recupere la structure des widget */
            p_st_data = g_list_nth_data (p_list, i);
            p_tmp_tab_s = p_st_data;
 
 
            /* Reception d'un message */
            if (FD_ISSET (p_tmp_tab_s->sock, &fd_read))
            {
               if ((numbytes = recv (p_tmp_tab_s->sock,
                                     s_buffer,
                                     MAX_BUF_SIZE,
                                     0)) < 0)
               {
                  perror ("recv");
               }
               else
               {
                  /* Verification du message. Si c'est un PING, on repond
                      par un PONG. Sinon, on affiche le message a l'ecran. */
                  s_buffer[numbytes] = '\0';
 
                  if (strncmp (s_buffer, "PING", 4) == 0)
                  {
                     strncpy (s_buffer, "PONG", 4);
 
                     /* Envoie de la reponse du PING */
                     if ((numbytes = send (p_tmp_tab_s->sock,
                                           s_buffer,
                                           strlen (s_buffer),
                                           0)) < 0)
                     {
                        perror ("send");
                     }
 
                     memset (&s_buffer, 0, sizeof (s_buffer));
                  }
                  else
                  {
                     gdk_threads_enter ();
 
 
                     /* Recupere le buffer de la zone de texte */
                     p_buffer = gtk_text_view_get_buffer (
                                    GTK_TEXT_VIEW (p_tmp_tab_s->p_text_view));
 
 
                     /* Affichage du message */
                     gtk_text_buffer_get_end_iter (p_buffer, &i_end);
                     gtk_text_buffer_insert (p_buffer, &i_end, s_buffer, -1);
 
 
                     gdk_threads_leave ();
 
                     memset (&s_buffer, 0, sizeof (s_buffer));
                  }
               }
            }
 
            i++;
         }
 
 
         p_list = NULL;
         p_st_data = NULL;
         p_tmp_tab_s = NULL;
      }
 
 
      sleep (1);
   }
 
 
 
 
   return NULL;
} |