#pragma implementation #include #include #include #include "eventmgr.h" #include "eventmgr.m" class EVENTMGR_PRIVATE{ public: SSTRING id; _F_EVENTMGR *c; int fd; EVENTMGR_PRIVATE(_F_EVENTMGR &_c, const char *_id){ c = &c; fd = -1; id.setfrom (_id); } ~EVENTMGR_PRIVATE(){ if (fd != -1) close (fd); } }; int _F_EVENTMGR::collect() { return 0; } PUBLIC EVENTMGR::EVENTMGR(_F_EVENTMGR &c, const char *id) { priv = new EVENTMGR_PRIVATE (c,id); c.priv = priv; } PUBLIC EVENTMGR::~EVENTMGR() { delete priv; } PRIVATE int EVENTMGR::connect() { int ret = -1; if (priv->fd != -1){ ret = 0; }else{ char sockpath[PATH_MAX]; snprintf (sockpath,sizeof(sockpath)-1,"%s/.tlmp/eventmgr.sock" ,getenv("HOME")); int fd = socket (AF_UNIX,SOCK_STREAM,0); if (fd == -1){ tlmp_error (MSG_U(E_SOCKET,"Can't create socket")); }else{ struct sockaddr_un un; un.sun_family = AF_UNIX; strcpy (un.sun_path,sockpath); int s = connect(fd,(struct sockaddr*)&un,sizeof(un)); if (s == -1){ tlmp_error (MSG_U(E_CONNECT ,"Connection to the event manager failed\n%s (%s)") ,sockpath,strerror(errno)); }else{ priv->fd = fd; ret = 0; } } } return ret; } PUBLIC void EVENTMGR::sendevent (const char *e) { if (priv->fd == -1) connect(); if (priv->fd != -1){ write (fd,"event:",6); write (fd,s,strlen(s)); write (fd,"\n",1); } } PUBLIC void EVENTMGR::sendeventf (const char *ctl, ...) { va_list list; va_start (ctl,list); char tmp[1000]; vsnprintf (tmp,sizeof(tmp)-1,ctl,list); va_end (list); sendevent (tmp); }