Use gitignore based on old cvsignore.
[yazpp-moved-to-github.git] / include / yazpp / socket-manager.h
1 /*
2  * Copyright (c) 1998-2005, Index Data.
3  * See the file LICENSE for details.
4  * 
5  * $Id: socket-manager.h,v 1.1 2006-03-29 13:14:15 adam Exp $
6  */
7
8 #ifndef YAZ_SOCKET_MANAGER_INCLUDED
9 #define YAZ_SOCKET_MANAGER_INCLUDED
10
11 #include <yazpp/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 SocketManager : public ISocketObservable {
21  private:
22     struct SocketEntry {
23         ISocketObserver *observer;
24         int fd;
25         unsigned mask;
26         int timeout;
27         int timeout_this;
28         time_t last_activity;
29         SocketEntry *next;
30     };
31     SocketEntry *m_observers;       // all registered observers
32     struct SocketEvent {
33         ISocketObserver *observer;
34         int event;
35         SocketEvent *next;          // front in queue
36         SocketEvent *prev;          // back in queue
37     };
38     SocketEvent *m_queue_front;
39     SocketEvent *m_queue_back;
40     
41     SocketEntry **lookupObserver
42         (ISocketObserver *observer);
43     SocketEvent *getEvent();
44     void putEvent(SocketEvent *event);
45     void removeEvent(ISocketObserver *observer);
46     int m_log;
47  public:
48     /// Add an observer
49     virtual void addObserver(int fd, ISocketObserver *observer);
50     /// Delete an observer
51     virtual void deleteObserver(ISocketObserver *observer);
52     /// Delete all observers
53     virtual void deleteObservers();
54     /// Set event mask for observer
55     virtual void maskObserver(ISocketObserver *observer, int mask);
56     /// Set timeout
57     virtual void timeoutObserver(ISocketObserver *observer,
58                                  int timeout);
59     /// Process one event. return > 0 if event could be processed;
60     int processEvent();
61     SocketManager();
62     virtual ~SocketManager();
63 };
64
65 };
66
67 #endif
68 /*
69  * Local variables:
70  * c-basic-offset: 4
71  * indent-tabs-mode: nil
72  * End:
73  * vim: shiftwidth=4 tabstop=8 expandtab
74  */
75