Preinit facility for proxy
[yazpp-moved-to-github.git] / include / yaz++ / socket-manager.h
1 /*
2  * Copyright (c) 1998-2000, Index Data.
3  * See the file LICENSE for details.
4  * 
5  * $Id: socket-manager.h,v 1.2 2002-10-23 21:23:01 adam Exp $
6  */
7
8 #ifndef YAZ_SOCKET_MANAGER_INCLUDED
9 #define YAZ_SOCKET_MANAGER_INCLUDED
10
11 #include <yaz++/socket-observer.h>
12 #include <time.h>
13
14 /** Simple Socket Manager.
15     Implements a stand-alone simple model that uses select(2) to
16     observe socket events.
17 */
18 class YAZ_EXPORT Yaz_SocketManager : public IYazSocketObservable {
19  private:
20     struct YazSocketEntry {
21         IYazSocketObserver *observer;
22         int fd;
23         unsigned mask;
24         unsigned timeout;
25         unsigned timeout_this;
26         time_t last_activity;
27         YazSocketEntry *next;
28     };
29     YazSocketEntry *m_observers;       // all registered observers
30     struct YazSocketEvent {
31         IYazSocketObserver *observer;
32         int event;
33         YazSocketEvent *next;          // front in queue
34         YazSocketEvent *prev;          // back in queue
35     };
36     YazSocketEvent *m_queue_front;
37     YazSocketEvent *m_queue_back;
38     
39     YazSocketEntry **Yaz_SocketManager::lookupObserver
40         (IYazSocketObserver *observer);
41     YazSocketEvent *Yaz_SocketManager::getEvent();
42     void putEvent(YazSocketEvent *event);
43     void removeEvent(IYazSocketObserver *observer);
44     int m_log;
45  public:
46     /// Add an 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);
54     /// Set timeout
55     virtual void timeoutObserver(IYazSocketObserver *observer,
56                                  unsigned timeout);
57     /// Process one event. return > 0 if event could be processed;
58     int processEvent();
59     Yaz_SocketManager();
60     virtual ~Yaz_SocketManager();
61 };
62
63
64 #endif