minor
[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: yaz-socket-manager.h,v 1.7 2000-09-12 16:40:33 heikki 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         time_t last_activity;
26         YazSocketEntry *next;
27     };
28     YazSocketEntry *m_observers;       // all registered observers
29     struct YazSocketEvent {
30         IYazSocketObserver *observer;
31         int event;
32         YazSocketEvent *next;          // front in queue
33         YazSocketEvent *prev;          // back in queue
34     };
35     YazSocketEvent *m_queue_front;
36     YazSocketEvent *m_queue_back;
37     
38     YazSocketEntry **Yaz_SocketManager::lookupObserver
39         (IYazSocketObserver *observer);
40     YazSocketEvent *Yaz_SocketManager::getEvent();
41     void putEvent(YazSocketEvent *event);
42     void removeEvent(IYazSocketObserver *observer);
43     int m_log;
44  public:
45     /// Add an observer
46     virtual void addObserver(int fd, IYazSocketObserver *observer);
47     /// Delete an observer
48     virtual void deleteObserver(IYazSocketObserver *observer);
49     /// Delete all observers
50     virtual void deleteObservers();
51     /// Set event mask for observer
52     virtual void maskObserver(IYazSocketObserver *observer, int mask);
53     /// Set timeout
54     virtual void timeoutObserver(IYazSocketObserver *observer,
55                                  unsigned timeout);
56     /// Process one event. return > 0 if event could be processed;
57     int Yaz_SocketManager::processEvent();
58     Yaz_SocketManager();
59     virtual ~Yaz_SocketManager();
60 };
61
62
63 #endif