-#include "proxyp.h"
-
-class Proxy_Msg {
-public:
- virtual void destroy() = 0;
- virtual Proxy_Msg *handle() = 0;
- virtual void result() = 0;
-};
-
-class Proxy_Msg_Queue_List {
- friend class Proxy_Msg_Queue;
- private:
- Proxy_Msg *m_item;
- Proxy_Msg_Queue_List *m_next;
-};
-
-class Proxy_Msg_Queue {
- public:
- Proxy_Msg_Queue();
- void enqueue(Proxy_Msg *in);
- Proxy_Msg *dequeue();
- int size();
- private:
- Proxy_Msg_Queue_List *m_list;
-};
-
-Proxy_Msg_Queue::Proxy_Msg_Queue()
-{
- m_list = 0;
-}
-
-int Proxy_Msg_Queue::size()
-{
- int no = 0;
- Proxy_Msg_Queue_List *l;
- for (l = m_list; l; l = l->m_next)
- no++;
- return no;
-}
-
-void Proxy_Msg_Queue::enqueue(Proxy_Msg *m)
-{
- Proxy_Msg_Queue_List *l = new Proxy_Msg_Queue_List;
- l->m_next = m_list;
- l->m_item = m;
- m_list = l;
-}
-
-Proxy_Msg *Proxy_Msg_Queue::dequeue()
-{
- Proxy_Msg_Queue_List **l = &m_list;
- if (!*l)
- return 0;
- while ((*l)->m_next)
- l = &(*l)->m_next;
- Proxy_Msg *m = (*l)->m_item;
- delete *l;
- *l = 0;
- return m;
-}
-
-class Proxy_Thread : public IYazSocketObserver {
-public:
- Proxy_Thread(IYazSocketObservable *obs);
- virtual ~Proxy_Thread();
- void socketNotify(int event);
- void put(Proxy_Msg *m);
- Proxy_Msg *get();
- void run(void *p);
-private:
- IYazSocketObservable *m_obs;
- int m_fd[2];
- pthread_t m_thread_id;
- Proxy_Msg_Queue m_input;
- Proxy_Msg_Queue m_output;
- pthread_mutex_t m_mutex_input_data;
- pthread_cond_t m_cond_input_data;
- pthread_mutex_t m_mutex_output_data;
- pthread_cond_t m_cond_output_data;
-};
-
-static void *tfunc(void *p)
-{
- Proxy_Thread *pt = (Proxy_Thread *) p;
- pt->run(0);
- return 0;
-}
-