2 * Copyright (c) 1998-2004, Index Data.
3 * See the file LICENSE for details.
5 * $Id: socket-manager.h,v 1.4 2005-06-02 06:40:21 adam Exp $
8 #ifndef YAZ_SOCKET_MANAGER_INCLUDED
9 #define YAZ_SOCKET_MANAGER_INCLUDED
11 #include <yaz++/socket-observer.h>
16 /** Simple Socket Manager.
17 Implements a stand-alone simple model that uses select(2) to
18 observe socket events.
20 class YAZ_EXPORT Yaz_SocketManager : public IYazSocketObservable {
22 struct YazSocketEntry {
23 IYazSocketObserver *observer;
31 YazSocketEntry *m_observers; // all registered observers
32 struct YazSocketEvent {
33 IYazSocketObserver *observer;
35 YazSocketEvent *next; // front in queue
36 YazSocketEvent *prev; // back in queue
38 YazSocketEvent *m_queue_front;
39 YazSocketEvent *m_queue_back;
41 YazSocketEntry **Yaz_SocketManager::lookupObserver
42 (IYazSocketObserver *observer);
43 YazSocketEvent *Yaz_SocketManager::getEvent();
44 void putEvent(YazSocketEvent *event);
45 void removeEvent(IYazSocketObserver *observer);
49 virtual void addObserver(int fd, IYazSocketObserver *observer);
50 /// Delete an observer
51 virtual void deleteObserver(IYazSocketObserver *observer);
52 /// Delete all observers
53 virtual void deleteObservers();
54 /// Set event mask for observer
55 virtual void maskObserver(IYazSocketObserver *observer, int mask);
57 virtual void timeoutObserver(IYazSocketObserver *observer,
59 /// Process one event. return > 0 if event could be processed;
62 virtual ~Yaz_SocketManager();