X-Git-Url: https://hackdaworld.org/gitweb/?a=blobdiff_plain;f=event%2Fevent.c;h=fb3c82efb261cce36bca804be3661b492264a1d0;hb=HEAD;hp=9a1b6f94d78c4bd619887939021b39c157026b78;hpb=ea939060d8c1df6b3de0b3204a0b5b06018ee8da;p=my-code%2Fapi.git diff --git a/event/event.c b/event/event.c index 9a1b6f9..fb3c82e 100644 --- a/event/event.c +++ b/event/event.c @@ -6,12 +6,14 @@ #include "event.h" -int event_init(t_event *event) { +int event_init(t_event *event,int outfd) { - fprintf(stderr,"[event] initializing event system ...\n"); + dprintf(outfd,"[event] initializing event system ...\n"); event->maxfd=0; + event->outfd=outfd; + FD_ZERO(&(event->rfds)); FD_ZERO(&(event->rfds_o)); FD_ZERO(&(event->wfds)); @@ -20,6 +22,22 @@ int event_init(t_event *event) { return E_SUCCESS; } +int event_set_timeout(t_event *event,int sec,int usec) { + + event->timeout.tv_sec=sec; + event->timeout.tv_usec=usec; + + return E_SUCCESS; +} + +int event_set_immediately(t_event *event,unsigned char value) { + + if(value==IMM_TRUE) + event->immediately=value; + + return E_SUCCESS; +} + int event_math(int fd,t_event *event,char rw,char ar) { if(ar==ADD) { @@ -32,8 +50,8 @@ int event_math(int fd,t_event *event,char rw,char ar) { if(fd==event->maxfd) event->maxfd-=1; } - fprintf(stderr,"[event] %c fd %d to %c file descriptor set\n",ar==ADD?'+':'-', - fd,rw==READ?'r':'w'); + dprintf(event->outfd,"[event] %c fd %d to %c file descriptor set\n", + ar==ADD?'+':'-',fd,rw==READ?'r':'w'); return E_SUCCESS; } @@ -44,6 +62,7 @@ int event_start(t_event *event,void *ptr, int s_ret; struct timeval tv; + struct timeval *tv_ptr; /* switch on event system */ event->status=ENABLED; @@ -54,8 +73,11 @@ int event_start(t_event *event,void *ptr, event->wfds=event->wfds_o; tv=event->timeout; + if((tv.tv_sec==0)&&(tv.tv_usec==0)&&(!(event->immediately))) tv_ptr=NULL; + else tv_ptr=&tv; + if((s_ret=select(event->maxfd+1,&(event->rfds),&(event->wfds),NULL, - &tv))==-1) { + tv_ptr))==-1) { perror("[event] select call"); return E_ERROR; } @@ -63,14 +85,14 @@ int event_start(t_event *event,void *ptr, if(s_ret) { /* 1+ fd(s) available for reading/writing */ if(callback0(event,ptr)==CALLBACK_ERROR) { - fprintf(stderr,"[event] callback0 returned error\n"); + dprintf(event->outfd,"[event] callback0 returned error\n"); return E_ERROR; } } /* usual stuff to be executed */ if(callback1(event,ptr)==CALLBACK_ERROR) { - fprintf(stderr,"[event] callback returned error\n"); + dprintf(event->outfd,"[event] callback returned error\n"); return E_ERROR; } @@ -79,9 +101,16 @@ int event_start(t_event *event,void *ptr, return E_SUCCESS; } +int event_check(t_event *event,int fd) { + + if(FD_ISSET(fd,&(event->wfds))|FD_ISSET(fd,&(event->rfds))) return E_FD_YES; + else return E_FD_NO; + +} + int event_stop(t_event *event) { - fprintf(stderr,"[event] shutdown\n"); + dprintf(event->outfd,"[event] shutdown\n"); event->status=DISABLED; return E_SUCCESS;