From 73c9f3dfff68f316750bcd87b044e0d636d5070f Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Mon, 12 Nov 2012 13:50:35 +0100 Subject: [PATCH] Further trims of SocketManager class --- include/yazpp/socket-manager.h | 10 +----- src/yaz-socket-manager.cpp | 76 ++++++++++++++++++++++------------------ 2 files changed, 42 insertions(+), 44 deletions(-) diff --git a/include/yazpp/socket-manager.h b/include/yazpp/socket-manager.h index 87e828d..24469d5 100644 --- a/include/yazpp/socket-manager.h +++ b/include/yazpp/socket-manager.h @@ -44,13 +44,6 @@ class YAZ_EXPORT SocketManager : public ISocketObservable { struct Rep; Rep *m_p; - - SocketEntry **lookupObserver(ISocketObserver *observer); - SocketEvent *getEvent(); - void putEvent(SocketEvent *event); - void removeEvent(ISocketObserver *observer); - void inspect_poll_result(int res, struct yaz_poll_fd *fds, int no_fds, - int timeout); public: /// Add an observer virtual void addObserver(int fd, ISocketObserver *observer); @@ -61,8 +54,7 @@ class YAZ_EXPORT SocketManager : public ISocketObservable { /// Set event mask for observer virtual void maskObserver(ISocketObserver *observer, int mask); /// Set timeout - virtual void timeoutObserver(ISocketObserver *observer, - int timeout); + virtual void timeoutObserver(ISocketObserver *observer, int timeout); /// Process one event. return > 0 if event could be processed; int processEvent(); int getNumberOfObservers(); diff --git a/src/yaz-socket-manager.cpp b/src/yaz-socket-manager.cpp index 2feaf20..f5eb1be 100644 --- a/src/yaz-socket-manager.cpp +++ b/src/yaz-socket-manager.cpp @@ -47,18 +47,24 @@ struct SocketManager::SocketEvent { }; struct SocketManager::Rep { + void putEvent(SocketEvent *event); + SocketEvent *getEvent(); + void removeEvent(ISocketObserver *observer); + void inspect_poll_result(int res, struct yaz_poll_fd *fds, int no_fds, + int timeout); + SocketEntry **lookupObserver(ISocketObserver *observer); SocketEntry *observers; // all registered observers SocketEvent *queue_front; SocketEvent *queue_back; int log; }; -SocketManager::SocketEntry **SocketManager::lookupObserver( +SocketManager::SocketEntry **SocketManager::Rep::lookupObserver( ISocketObserver *observer) { SocketEntry **se; - for (se = &m_p->observers; *se; se = &(*se)->next) + for (se = &observers; *se; se = &(*se)->next) if ((*se)->observer == observer) break; return se; @@ -77,7 +83,7 @@ void SocketManager::addObserver(int fd, ISocketObserver *observer) { SocketEntry *se; - se = *lookupObserver(observer); + se = *m_p->lookupObserver(observer); if (!se) { se = new SocketEntry; @@ -93,10 +99,10 @@ void SocketManager::addObserver(int fd, ISocketObserver *observer) void SocketManager::deleteObserver(ISocketObserver *observer) { - SocketEntry **se = lookupObserver(observer); + SocketEntry **se = m_p->lookupObserver(observer); if (*se) { - removeEvent(observer); + m_p->removeEvent(observer); SocketEntry *se_tmp = *se; *se = (*se)->next; delete se_tmp; @@ -125,7 +131,7 @@ void SocketManager::maskObserver(ISocketObserver *observer, int mask) mask & SOCKET_OBSERVE_WRITE, mask & SOCKET_OBSERVE_EXCEPT); - se = *lookupObserver(observer); + se = *m_p->lookupObserver(observer); if (se) se->mask = mask; } @@ -135,16 +141,16 @@ void SocketManager::timeoutObserver(ISocketObserver *observer, { SocketEntry *se; - se = *lookupObserver(observer); + se = *m_p->lookupObserver(observer); if (se) se->timeout = timeout; } -void SocketManager::inspect_poll_result(int res, struct yaz_poll_fd *fds, - int no_fds, int timeout) +void SocketManager::Rep::inspect_poll_result(int res, struct yaz_poll_fd *fds, + int no_fds, int timeout) { - yaz_log(m_p->log, "yaz_poll returned res=%d", res); + yaz_log(log, "yaz_poll returned res=%d", res); time_t now = time(0); int i; int no_put_events = 0; @@ -153,7 +159,7 @@ void SocketManager::inspect_poll_result(int res, struct yaz_poll_fd *fds, for (i = 0; i < no_fds; i++) { SocketEntry *p; - for (p = m_p->observers; p; p = p->next) + for (p = observers; p; p = p->next) if (p->fd == fds[i].fd) break; if (!p) @@ -183,13 +189,13 @@ void SocketManager::inspect_poll_result(int res, struct yaz_poll_fd *fds, event->event = mask; putEvent(event); no_put_events++; - yaz_log(m_p->log, "putEvent I/O mask=%d", mask); + yaz_log(log, "putEvent I/O mask=%d", mask); } else if (res == 0 && p->timeout_this == timeout) { SocketEvent *event = new SocketEvent; assert(p->last_activity); - yaz_log(m_p->log, "putEvent timeout fd=%d, now = %ld " + yaz_log(log, "putEvent timeout fd=%d, now = %ld " "last_activity=%ld timeout=%d", p->fd, now, p->last_activity, p->timeout); p->last_activity = now; @@ -222,7 +228,7 @@ void SocketManager::inspect_poll_result(int res, struct yaz_poll_fd *fds, int SocketManager::processEvent() { SocketEntry *p; - SocketEvent *event = getEvent(); + SocketEvent *event = m_p->getEvent(); int timeout = -1; yaz_log(m_p->log, "SocketManager::processEvent manager=%p", this); if (event) @@ -287,7 +293,7 @@ int SocketManager::processEvent() } if (res >= 0) - inspect_poll_result(res, fds, no_fds, timeout); + m_p->inspect_poll_result(res, fds, no_fds, timeout); delete [] fds; return res >= 0 ? 1 : -1; @@ -296,45 +302,45 @@ int SocketManager::processEvent() // n p n p ...... n p n p // front back -void SocketManager::putEvent(SocketEvent *event) +void SocketManager::Rep::putEvent(SocketEvent *event) { // put in back of queue - if (m_p->queue_back) + if (queue_back) { - m_p->queue_back->prev = event; - assert(m_p->queue_front); + queue_back->prev = event; + assert(queue_front); } else { - assert(!m_p->queue_front); - m_p->queue_front = event; + assert(!queue_front); + queue_front = event; } - event->next = m_p->queue_back; + event->next = queue_back; event->prev = 0; - m_p->queue_back = event; + queue_back = event; } -SocketManager::SocketEvent *SocketManager::getEvent() +SocketManager::SocketEvent *SocketManager::Rep::getEvent() { // get from front of queue - SocketEvent *event = m_p->queue_front; + SocketEvent *event = queue_front; if (!event) return 0; - assert(m_p->queue_back); - m_p->queue_front = event->prev; - if (m_p->queue_front) + assert(queue_back); + queue_front = event->prev; + if (queue_front) { - assert(m_p->queue_back); - m_p->queue_front->next = 0; + assert(queue_back); + queue_front->next = 0; } else - m_p->queue_back = 0; + queue_back = 0; return event; } -void SocketManager::removeEvent(ISocketObserver *observer) +void SocketManager::Rep::removeEvent(ISocketObserver *observer) { - SocketEvent *ev = m_p->queue_back; + SocketEvent *ev = queue_back; while (ev) { SocketEvent *ev_next = ev->next; @@ -343,11 +349,11 @@ void SocketManager::removeEvent(ISocketObserver *observer) if (ev->prev) ev->prev->next = ev->next; else - m_p->queue_back = ev->next; + queue_back = ev->next; if (ev->next) ev->next->prev = ev->prev; else - m_p->queue_front = ev->prev; + queue_front = ev->prev; delete ev; } ev = ev_next; -- 1.7.10.4