Added skeleton of yaz-z-server.
[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.6 2000-09-08 10:23:42 adam Exp $
6  */
7
8 #include <yaz-socket-observer.h>
9 #include <time.h>
10
11 /** Simple Socket Manager.
12     Implements a stand-alone simple model that uses select(2) to
13     observe socket events.
14 */
15 class YAZ_EXPORT Yaz_SocketManager : public IYazSocketObservable {
16  private:
17     struct YazSocketEntry {
18         IYazSocketObserver *observer;
19         int fd;
20         unsigned mask;
21         unsigned timeout;
22         time_t last_activity;
23         YazSocketEntry *next;
24     };
25     YazSocketEntry *m_observers;       // all registered observers
26     struct YazSocketEvent {
27         IYazSocketObserver *observer;
28         int event;
29         YazSocketEvent *next;          // front in queue
30         YazSocketEvent *prev;          // back in queue
31     };
32     YazSocketEvent *m_queue_front;
33     YazSocketEvent *m_queue_back;
34     
35     YazSocketEntry **Yaz_SocketManager::lookupObserver
36         (IYazSocketObserver *observer);
37     YazSocketEvent *Yaz_SocketManager::getEvent();
38     void putEvent(YazSocketEvent *event);
39     void removeEvent(IYazSocketObserver *observer);
40     int m_log;
41  public:
42     /// Add an observer
43     virtual void addObserver(int fd, IYazSocketObserver *observer);
44     /// Delete an observer
45     virtual void deleteObserver(IYazSocketObserver *observer);
46     /// Delete all observers
47     virtual void deleteObservers();
48     /// Set event mask for observer
49     virtual void maskObserver(IYazSocketObserver *observer, int mask);
50     /// Set timeout
51     virtual void timeoutObserver(IYazSocketObserver *observer,
52                                  unsigned timeout);
53     /// Process one event. return > 0 if event could be processed;
54     int Yaz_SocketManager::processEvent();
55     Yaz_SocketManager();
56     virtual ~Yaz_SocketManager();
57 };
58