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;
} |