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