First WIN32 port of YAZ++.
[yazpp-moved-to-github.git] / include / yaz-socket-manager.h
1 /*
2  * Copyright (c) 1998-1999, Index Data.
3  * See the file LICENSE for details.
4  * Sebastian Hammer, Adam Dickmeiss
5  * 
6  * $Log: yaz-socket-manager.h,v $
7  * Revision 1.2  1999-02-02 14:01:16  adam
8  * First WIN32 port of YAZ++.
9  *
10  * Revision 1.1.1.1  1999/01/28 09:41:07  adam
11  * First implementation of YAZ++.
12  *
13  */
14
15 #include <yaz-socket-observer.h>
16
17 /** Simple Socket Manager.
18     Implements a stand-alone simple model that uses select(2) to
19     observe socket events.
20 */
21 class YAZ_EXPORT Yaz_SocketManager : public IYazSocketObservable {
22  private:
23     struct YazSocketEntry {
24         IYazSocketObserver *observer;
25         int fd;
26         unsigned mask;
27         unsigned timeout;
28         YazSocketEntry *next;
29     };
30     YazSocketEntry *m_observers;       // all registered observers
31     struct YazSocketEvent {
32         IYazSocketObserver *observer;
33         int event;
34         YazSocketEvent *next;          // front in queue
35         YazSocketEvent *prev;          // back in queue
36     };
37     YazSocketEvent *m_queue_front;
38     YazSocketEvent *m_queue_back;
39     
40     YazSocketEntry **Yaz_SocketManager::lookupObserver
41         (IYazSocketObserver *observer);
42     YazSocketEvent *Yaz_SocketManager::getEvent();
43     void putEvent(YazSocketEvent *event);
44     void removeEvent(IYazSocketObserver *observer);
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 Yaz_SocketManager::processEvent();
59     Yaz_SocketManager();
60     virtual ~Yaz_SocketManager();
61 };
62