Simplified process interface. Private sub class Worker.
[metaproxy-moved-to-github.git] / src / package.hpp
1
2 #ifndef PACKAGE_HPP
3 #define PACKAGE_HPP
4
5 #include <iostream>
6 #include <stdexcept>
7 #include <yaz++/gdu.h>
8
9 #include "router.hpp"
10 #include "filter.hpp"
11 #include "session.hpp"
12
13 namespace yp2 {
14     
15     class Origin {
16         enum origin_t {
17             API,
18             UNIX,
19             TCPIP
20         } type;
21         std::string address; // UNIX+TCPIP
22         int port;            // TCPIP only
23     public:
24         Origin() : type(API) {};
25     };
26     
27     class Package {
28     public:
29         
30         Package(yp2::Session &session, yp2::Origin &origin) 
31             : m_session(session), m_origin(origin),
32               m_filter(0), m_router(0), m_data(0)  {}
33
34         Package & copy_filter(const Package &p) {
35             m_router = p.m_router;
36             m_filter = p.m_filter;
37             return *this;
38         }
39
40         /// send Package to it's next Filter defined in Router
41         void move() {
42             m_filter = m_router->move(m_filter, this);
43             if (m_filter)
44                 m_filter->process(*this);
45         }
46         
47         /// access session - left val in assignment
48         yp2::Session & session() {
49             return m_session;
50         }
51         
52         /// get function - right val in assignment
53         unsigned int data() const {
54             return m_data;
55         }
56         
57         /// set function - left val in assignment
58         unsigned int & data() {
59             return m_data;
60         }
61         
62         /// set function - can be chained
63         Package & data(const unsigned int & data){
64             m_data = data;
65             return *this;
66         }
67         
68         
69         /// get function - right val in assignment
70         Origin origin() const {
71             return m_origin;
72         }
73         
74         /// set function - left val in assignment
75         Origin & origin() {
76             return m_origin;
77         }
78         
79         /// set function - can be chained
80         Package & origin(const Origin & origin){
81             m_origin = origin;
82             return *this;
83         }
84         
85         Package & router(const Router &router){
86             m_filter = 0;
87             m_router = &router;
88             return *this;
89         }
90
91         yazpp_1::GDU &request() {
92             return m_request_gdu;
93         }
94
95         yazpp_1::GDU &response() {
96             return m_response_gdu;
97         }
98                 
99         /// get function - right val in assignment
100         Session session() const {
101             return m_session;
102         }
103         
104     private:
105         Session m_session;
106         Origin m_origin;
107         
108         const Filter *m_filter;
109         const Router *m_router;
110         unsigned int m_data;
111         
112         yazpp_1::GDU m_request_gdu;
113         yazpp_1::GDU m_response_gdu;
114     };
115 }
116
117 #endif
118 /*
119  * Local variables:
120  * c-basic-offset: 4
121  * indent-tabs-mode: nil
122  * End:
123  * vim: shiftwidth=4 tabstop=8 expandtab
124  */