2 * Copyright (c) 1998-1999, Index Data.
3 * See the file LICENSE for details.
4 * Sebastian Hammer, Adam Dickmeiss
6 * $Log: yaz-socket-manager.h,v $
7 * Revision 1.3 1999-03-23 14:17:57 adam
8 * More work on timeout handling. Work on yaz-client.
10 * Revision 1.2 1999/02/02 14:01:16 adam
11 * First WIN32 port of YAZ++.
13 * Revision 1.1.1.1 1999/01/28 09:41:07 adam
14 * First implementation of YAZ++.
18 #include <yaz-socket-observer.h>
21 /** Simple Socket Manager.
22 Implements a stand-alone simple model that uses select(2) to
23 observe socket events.
25 class YAZ_EXPORT Yaz_SocketManager : public IYazSocketObservable {
27 struct YazSocketEntry {
28 IYazSocketObserver *observer;
35 YazSocketEntry *m_observers; // all registered observers
36 struct YazSocketEvent {
37 IYazSocketObserver *observer;
39 YazSocketEvent *next; // front in queue
40 YazSocketEvent *prev; // back in queue
42 YazSocketEvent *m_queue_front;
43 YazSocketEvent *m_queue_back;
45 YazSocketEntry **Yaz_SocketManager::lookupObserver
46 (IYazSocketObserver *observer);
47 YazSocketEvent *Yaz_SocketManager::getEvent();
48 void putEvent(YazSocketEvent *event);
49 void removeEvent(IYazSocketObserver *observer);
52 virtual void addObserver(int fd, IYazSocketObserver *observer);
53 /// Delete an observer
54 virtual void deleteObserver(IYazSocketObserver *observer);
55 /// Delete all observers
56 virtual void deleteObservers();
57 /// Set event mask for observer
58 virtual void maskObserver(IYazSocketObserver *observer, int mask);
60 virtual void timeoutObserver(IYazSocketObserver *observer,
62 /// Process one event. return > 0 if event could be processed;
63 int Yaz_SocketManager::processEvent();
65 virtual ~Yaz_SocketManager();