#include "event.h"
-int event_init(t_ivac *ivac) {
+int event_init(t_event *event) {
- puts("[ivac] event: initializing event system ...");
+ puts("[event] initializing event system ...");
- ivac->event.maxfd=0;
+ event->maxfd=0;
- FD_ZERO(ivac->event.rfds);
- FD_ZERO(ivac->event.rfds_c);
- FD_ZERO(ivac->event.wfds);
- FD_ZERO(ivac->event.wfds_c);
+ FD_ZERO(&(event->rfds));
+ FD_ZERO(&(event->rfds_o));
+ FD_ZERO(&(event->wfds));
+ FD_ZERO(&(event->wfds_o));
- return SUCCESS;
+ return E_SUCCESS;
+}
+
+int event_math(int fd,t_event *event,char rw,char ar) {
+
+ if(ar==ADD) {
+ if(rw==READ) FD_SET(fd,&(event->rfds_o));
+ else FD_SET(fd,&(event->wfds_o));
+ if(fd>event->maxfd) event->maxfd=fd;
+ } else {
+ if(rw==READ) FD_CLR(fd,&(event->rfds_o));
+ else FD_CLR(fd,&(event->wfds_o));
+ if(fd==event->maxfd) event->maxfd-=1;
+ }
+
+ printf("[event] %c fd %d to %c file descriptor set\n",ar==ADD?'+':'-',fd,
+ rw==READ?'r':'w');
+
+ return E_SUCCESS;
+}
+
+int event_start(t_event *event,void *ptr,
+ int (*callback0)(t_event *event,void *ptr),
+ int (*callback1)(t_event *event,void *ptr)) {
+
+ int s_ret;
+
+ /* switch on event system */
+ event->status=ENABLED;
+
+ while(event->status&ENABLED) {
+
+ event->rfds=event->rfds_o;
+ event->wfds=event->wfds_o;
+
+ if((s_ret=select(event->maxfd+1,&(event->rfds),&(event->wfds),NULL,
+ &(event->timeout)))==-1) {
+ perror("[event] select call");
+ return E_ERROR;
+ }
+
+ if(s_ret) {
+ /* 1+ fd(s) available for reading/writing */
+ if(callback0(event,ptr)==CALLBACK_ERROR) {
+ puts("[event] callback0 returned error");
+ return E_ERROR;
+ }
+ }
+
+ /* usual stuff to be executed */
+ if(callback1(event,ptr)==CALLBACK_ERROR) {
+ puts("[event] callback returned error");
+ return E_ERROR;
+ }
+
+ }
+
+ return E_SUCCESS;
+}
+
+int event_stop(t_event *event) {
+
+ puts("[event] shutdown");
+ event->status=DISABLED;
+
+ return E_SUCCESS;
}