Implemented FilterFrontendNet which is a network server based on
[metaproxy-moved-to-github.git] / src / thread_pool_observer.hpp
1 /* $Id: thread_pool_observer.hpp,v 1.1 2005-10-13 20:06:45 adam Exp $
2    Copyright (c) 1998-2005, Index Data.
3
4 This file is part of the yaz-proxy.
5
6 YAZ proxy is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 2, or (at your option) any later
9 version.
10
11 YAZ proxy is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with YAZ proxy; see the file LICENSE.  If not, write to the
18 Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
19 02111-1307, USA.
20  */
21
22 #ifndef YP2_THREAD_POOL_OBSERVER_HPP
23 #define YP2_THREAD_POOL_OBSERVER_HPP
24
25 #include <boost/thread/thread.hpp>
26 #include <boost/thread/mutex.hpp>
27 #include <boost/thread/condition.hpp>
28
29 #include <unistd.h>
30 #include <ctype.h>
31
32 #include <deque>
33 #include <yaz++/socket-observer.h>
34 #include <yaz/yconfig.h>
35
36 class IThreadPoolMsg {
37 public:
38     virtual IThreadPoolMsg *handle() = 0;
39     virtual void result() = 0;
40     virtual ~IThreadPoolMsg();
41 };
42
43 class ThreadPoolSocketObserver : public yazpp_1::ISocketObserver {
44  public:
45     ThreadPoolSocketObserver(yazpp_1::ISocketObservable *obs, int no_threads);
46     virtual ~ThreadPoolSocketObserver();
47     void socketNotify(int event);
48     void put(IThreadPoolMsg *m);
49     IThreadPoolMsg *get();
50     void run(void *p);
51     int m_fd[2];
52 private:
53     yazpp_1::ISocketObservable *m_SocketObservable;
54     int m_no_threads;
55     boost::thread_group m_thrds;
56
57     std::deque<IThreadPoolMsg *> m_input;
58     std::deque<IThreadPoolMsg *> m_output;
59
60     boost::mutex m_mutex_input_data;
61     boost::condition m_cond_input_data;
62     boost::mutex m_mutex_output_data;
63     bool m_stop_flag;
64 };
65
66 #endif
67 /*
68  * Local variables:
69  * c-basic-offset: 4
70  * indent-tabs-mode: nil
71  * End:
72  * vim: shiftwidth=4 tabstop=8 expandtab
73  */
74