2 * Copyright (c) 1998-2000, Index Data.
3 * See the file LICENSE for details.
5 * $Id: socket-manager.h,v 1.1 2002-10-09 12:50:26 adam Exp $
8 #ifndef YAZ_SOCKET_MANAGER_INCLUDED
9 #define YAZ_SOCKET_MANAGER_INCLUDED
11 #include <yaz++/socket-observer.h>
14 /** Simple Socket Manager.
15 Implements a stand-alone simple model that uses select(2) to
16 observe socket events.
18 class YAZ_EXPORT Yaz_SocketManager : public IYazSocketObservable {
20 struct YazSocketEntry {
21 IYazSocketObserver *observer;
25 unsigned timeout_this;
29 YazSocketEntry *m_observers; // all registered observers
30 struct YazSocketEvent {
31 IYazSocketObserver *observer;
33 YazSocketEvent *next; // front in queue
34 YazSocketEvent *prev; // back in queue
36 YazSocketEvent *m_queue_front;
37 YazSocketEvent *m_queue_back;
39 YazSocketEntry **Yaz_SocketManager::lookupObserver
40 (IYazSocketObserver *observer);
41 YazSocketEvent *Yaz_SocketManager::getEvent();
42 void putEvent(YazSocketEvent *event);
43 void removeEvent(IYazSocketObserver *observer);
47 virtual void addObserver(int fd, IYazSocketObserver *observer);
48 /// Delete an observer
49 virtual void deleteObserver(IYazSocketObserver *observer);
50 /// Delete all observers
51 virtual void deleteObservers();
52 /// Set event mask for observer
53 virtual void maskObserver(IYazSocketObserver *observer, int mask);
55 virtual void timeoutObserver(IYazSocketObserver *observer,
57 /// Process one event. return > 0 if event could be processed;
58 int Yaz_SocketManager::processEvent();
60 virtual ~Yaz_SocketManager();