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 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
| void * foncs_messages_monitoring (void *p_data)
{
int numbytes;
int current_page;
char s_buffer[MAX_BUF_SIZE];
GtkTextBuffer *p_buffer = NULL;
GtkTextIter i_end;
gpointer p_st_data;
gpointer p;
_tab_srv_s *p_tmp_tab_srv_s = NULL;
_tab_chan_s *p_tmp_tab_chan_s = NULL;
_tab_type_e *tab_type_e = NULL;
#if defined (WIN32)
SOCKET tmp_sock;
#endif
/* -------------------------------------------
On recupere le numero de la page courrante
*/
current_page = gtk_notebook_get_current_page (
GTK_NOTEBOOK (main_win_s->p_notebook));
/* ---------------------------------------
Recupere l'element de la liste chainee
*/
if (p_data != NULL)
{
p = p_data;
tab_type_e = (_tab_type_e *)p;
/* On recupere la structure des widget */
p_st_data = g_list_nth_data (p_tab_srv_chan_list, current_page);
switch (*tab_type_e)
{
case TAB_TYPE_SERVER:
{
p_tmp_tab_srv_s = p_st_data;
tmp_sock = p_tmp_tab_srv_s->sock;
}
break;
case TAB_TYPE_CHANNEL:
{
p_tmp_tab_chan_s = p_st_data;
tmp_sock = p_tmp_tab_chan_s->sock;
}
break;
default:
break;
}
}
else
{
return NULL;
}
if (p_tmp_tab_srv_s == NULL && p_tmp_tab_chan_s == NULL)
{
return NULL;
}
/* -------------------------------------
Reception et traitement des messages
*/
/* Reception d'un message */
if ((numbytes = recv (tmp_sock,
s_buffer,
MAX_BUF_SIZE,
0)) < 0)
{
return NULL;
}
/* 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 (tmp_sock,
s_buffer,
strlen (s_buffer),
0)) < 0)
{
memset (&s_buffer, 0, sizeof (s_buffer));
return NULL;
}
memset (&s_buffer, 0, sizeof (s_buffer));
}
else
{
/* Recupere le buffer de la zone de texte */
switch (*tab_type_e)
{
case TAB_TYPE_SERVER:
{
p_buffer = gtk_text_view_get_buffer (
GTK_TEXT_VIEW (p_tmp_tab_srv_s->p_text_view));
}
break;
case TAB_TYPE_CHANNEL:
{
p_buffer = gtk_text_view_get_buffer (
GTK_TEXT_VIEW (p_tmp_tab_chan_s->p_text_view));
}
break;
default:
break;
}
/* Envoie du message */
gtk_text_buffer_get_end_iter (p_buffer, &i_end);
gtk_text_buffer_insert (p_buffer, &i_end, s_buffer, -1);
memset (&s_buffer, 0, sizeof (s_buffer));
}
return NULL;
} |
Partager