added fast(er) list to be included (just in header) + small bug fix
[my-code/api.git] / event / event.c
index 9a1b6f9..fb3c82e 100644 (file)
@@ -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;