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
| /*
** my_loop.c for zappy in /home/skeud/programme/epitech/zappy/serveur/src
**
** Made by escudi_r
** Login <escudi_r@epitech.net>
**
** Started on Fri Apr 30 16:24:02 2010 escudi_r
** Last update Sat Jun 19 14:20:53 2010 escudi_r
*/
#include "serveur.h"
int my_loop_end(s_zappy *zappy)
{
//met a jour tout les clients (zappy contient une liste chainee de client)
update_time(zappy);
//parcour tout les client pour savoir si il faut leur envoyer une reponse
write_all(zappy);
return (ERROR);
}
int init_my_loop(struct s_zappy *zappy, struct timeval *heure)
{
int max;
//permet de trouver le temps minimum et de le setter pour le select
put_time(zappy);
FD_ZERO(&zappy->readf);
FD_ZERO(&zappy->writef);
max = set_fd(zappy);
//initialise l'heure pour pouvoir la compter plus tard
gettimeofday(heure, NULL);
return (max);
}
int change_time(struct timeval *timer, struct timeval *heure)
{
gettimeofday(&heure[1], NULL);
heure[1].tv_sec -= heure[0].tv_sec;
heure[1].tv_usec -= heure[0].tv_usec;
if (heure[1].tv_usec < 0)
{
heure[1].tv_sec--;
heure[1].tv_usec += SECONDE;
}
timer->tv_sec -= heure[1].tv_sec;
timer->tv_usec -= heure[1].tv_usec;
if (timer->tv_usec < 0)
{
timer->tv_usec+=SECONDE;
timer->tv_sec--;
}
if (timer->tv_sec < 0)
{
timer->tv_sec = 0;
timer->tv_usec = 0;
}
}
int my_loop(struct s_zappy *zappy)
{
int continuer;
int max;
struct timeval heure[2];
continuer = 1;
// boucle principale
while (continuer)
{
//initialisation de la boucle
max = init_my_loop(zappy, &heure[0]);
//select
if ((max =
select(max + 1, &zappy->readf, &zappy->writef,
NULL, zappy->real)) == -1 && errno != EINTR)
{
//erreur du select
perror(P_SELECT);
return (ERROR);
}
if (zappy->real)
//met a jour le conteur pour connaitre le temps passer dans le select
change_time(zappy->real, heure);
//appel la fonction de fin de boucle
continuer = my_loop_end(zappy) == FIN || continuer == 0 ? 0 : 1;
}
return (SUCCESS);
} |
Partager