正在显示
1 个修改的文件
包含
196 行增加
和
0 行删除
src/server/python/dmpserverwrapper.cpp
0 → 100644
1 | +/************************************************************************** | |
2 | +* file: dmpserverwrapper.cpp | |
3 | + | |
4 | +* Author: wanzhongping | |
5 | +* Date: 2021-04-01 14:54:55 | |
6 | +* Email: zhongpingw@chinadci.com | |
7 | +* copyright: 广州城市信息研究所有限公司 | |
8 | +***************************************************************************/ | |
9 | +#define BOOST_BIND_GLOBAL_PLACEHOLDERS | |
10 | +#include <boost/python.hpp> | |
11 | +#include "../dmpserverfilter.h" | |
12 | +#include "../dmpserverinterface.h" | |
13 | +#include "../dmprequesthandler.h" | |
14 | +#include "../dmpserverrequest.h" | |
15 | +#include "../dmpserverresponse.h" | |
16 | +#include "../dmpservice.h" | |
17 | +#include <boost/python/suite/indexing/map_indexing_suite.hpp> | |
18 | +#include <boost/python/reference_existing_object.hpp> | |
19 | + | |
20 | +using namespace boost::python; | |
21 | + | |
22 | +struct DmpServiceWrap : DmpService, wrapper<DmpService> | |
23 | +{ | |
24 | + virtual std::string Name() const | |
25 | + { | |
26 | + return this->get_override("name")(); | |
27 | + } | |
28 | + | |
29 | + virtual std::string Version() const | |
30 | + { | |
31 | + return this->get_override("version")(); | |
32 | + } | |
33 | + virtual bool AllowMethod() const | |
34 | + { | |
35 | + return this->get_override("allow_method")(); | |
36 | + } | |
37 | + virtual void ExecuteRequest(const DmpServerRequest &request, DmpServerResponse &response) | |
38 | + { | |
39 | + if(override function=this->get_override("execute_request")) | |
40 | + { | |
41 | + try | |
42 | + { | |
43 | + reference_existing_object::apply<DmpServerRequest&>::type converter1; | |
44 | + reference_existing_object::apply<DmpServerResponse&>::type converter2; | |
45 | + PyObject* obj_req = converter1(request); | |
46 | + PyObject* obj_res = converter2(response); | |
47 | + object real_obj1 = object(handle<>(obj_req)); | |
48 | + object real_obj2 = object(handle<>(obj_res)); | |
49 | + function(real_obj1,real_obj2); | |
50 | + } | |
51 | + catch (boost::python::error_already_set &e) | |
52 | + { | |
53 | + PyErr_PrintEx(0); | |
54 | + } | |
55 | + } | |
56 | + else | |
57 | + { | |
58 | + DmpServiceWrap::ExecuteRequest(request,response); | |
59 | + } | |
60 | + } | |
61 | +}; | |
62 | + | |
63 | +struct DmpServerResponseWrap : DmpServerResponse, wrapper<DmpServerResponse> | |
64 | +{ | |
65 | + virtual void setStatusCode(int code) | |
66 | + { | |
67 | + this->get_override("set_status_code")(); | |
68 | + } | |
69 | + virtual int statusCode() const | |
70 | + { | |
71 | + return this->get_override("status_code")(); | |
72 | + } | |
73 | + virtual std::string Header( const std::string &key) const | |
74 | + { | |
75 | + return this->get_override("Header")(); | |
76 | + } | |
77 | + virtual void SetHeader( const std::string &key, const std::string &value ) | |
78 | + { | |
79 | + this->get_override("SetHeader")(); | |
80 | + } | |
81 | + virtual void RemoveHeader( const std::string &key ) | |
82 | + { | |
83 | + this->get_override("RemoveHeader")(); | |
84 | + } | |
85 | + virtual ParameterMap Headers() const | |
86 | + { | |
87 | + return this->get_override("Headers")(); | |
88 | + } | |
89 | + | |
90 | + virtual void SendError( int code, const std::string &message ) | |
91 | + { | |
92 | + this->get_override("SendError")(); | |
93 | + } | |
94 | + | |
95 | + virtual void Write(const std::string data) | |
96 | + { | |
97 | + this->get_override("write")(); | |
98 | + } | |
99 | + | |
100 | + virtual void WriteContent(const void * content, int length) | |
101 | + { | |
102 | + this->get_override("write_content")(); | |
103 | + } | |
104 | + | |
105 | + virtual void Clear() | |
106 | + { | |
107 | + this->get_override("Clear")(); | |
108 | + } | |
109 | +}; | |
110 | + | |
111 | +struct DmpServerFilterWrap : DmpServerFilter, wrapper<DmpServerFilter> | |
112 | +{ | |
113 | + DmpServerFilterWrap(DmpServerInterface *server_interface) | |
114 | + : DmpServerFilter(server_interface) | |
115 | + { | |
116 | + } | |
117 | + | |
118 | + void RequestReady() | |
119 | + { | |
120 | + this->get_override("request_ready")(); | |
121 | + } | |
122 | + | |
123 | + void RequestReadyDefault() | |
124 | + { | |
125 | + return this->DmpServerFilter::RequestReady(); | |
126 | + } | |
127 | + | |
128 | + void ResponseComplete() | |
129 | + { | |
130 | + this->get_override("response_complete")(); | |
131 | + } | |
132 | + | |
133 | + void SendResponse() | |
134 | + { | |
135 | + this->get_override("send_response")(); | |
136 | + } | |
137 | +}; | |
138 | + | |
139 | +struct DmpServerInterfaceWrap : DmpServerInterface, wrapper<DmpServerInterface> | |
140 | +{ | |
141 | + virtual DmpRequestHandler *RequestHandler() | |
142 | + { | |
143 | + return this->get_override("request_handler")(); | |
144 | + } | |
145 | + virtual void RegisterFilter(DmpServerFilter *filter, int priority = 0) | |
146 | + { | |
147 | + this->get_override("register_filter")(); | |
148 | + } | |
149 | + virtual DmpServiceRegistry *ServiceRegistry() | |
150 | + { | |
151 | + return this->get_override("service_registry")(); | |
152 | + } | |
153 | +}; | |
154 | + | |
155 | +BOOST_PYTHON_MODULE(dmap_server) | |
156 | +{ | |
157 | + class_<ParameterMap>("ParameterMap") | |
158 | + .def(map_indexing_suite<ParameterMap,true>()); | |
159 | + | |
160 | + class_<DmpServiceRegistry>("DmpServiceRegistry") | |
161 | + .def("register_service", &DmpServiceRegistry::RegisterService); | |
162 | + | |
163 | + class_<DmpServiceWrap, boost::noncopyable>("DmpService") | |
164 | + .def("name", pure_virtual(&DmpService::Name)) | |
165 | + .def("version", pure_virtual(&DmpService::Version)) | |
166 | + .def("allow_method", pure_virtual(&DmpService::AllowMethod)) | |
167 | + .def("execute_request", pure_virtual(&DmpService::ExecuteRequest)); | |
168 | + | |
169 | + class_<DmpServerRequest>("DmpServerRequest",init<std::string&>()); | |
170 | + | |
171 | + class_<DmpServerResponseWrap, boost::noncopyable>("DmpServerResponse") | |
172 | + .add_property("status_code", &DmpServerResponse::statusCode, &DmpServerResponse::setStatusCode) | |
173 | + .def("header", pure_virtual(&DmpServerResponse::Header)) | |
174 | + .def("write", pure_virtual(&DmpServerResponse::Write)) | |
175 | + .def("write_content", pure_virtual(&DmpServerResponse::WriteContent)) | |
176 | + .def("set_header", pure_virtual(&DmpServerResponse::SetHeader)); | |
177 | + | |
178 | + class_<DmpRequestHandler>("DmpRequestHandler",init<DmpServerRequest&, DmpServerResponse&>()) | |
179 | + .def("parameters", &DmpRequestHandler::Parameters) | |
180 | + .def("set_parameter", &DmpRequestHandler::SetParameter) | |
181 | + .def("request_headers", &DmpRequestHandler::RequestHeaders) | |
182 | + .def("clear", &DmpRequestHandler::Clear) | |
183 | + .def("set_response_header", &DmpRequestHandler::set_response_header) | |
184 | + .def("append_body", &DmpRequestHandler::AppendBody); | |
185 | + | |
186 | + class_<DmpServerFilterWrap, boost::noncopyable>("DmpServerFilter",init<DmpServerInterface*>()) | |
187 | + .def("request_ready", &DmpServerFilterWrap::RequestReady, &DmpServerFilterWrap::RequestReadyDefault) | |
188 | + .def("response_complete", &DmpServerFilterWrap::ResponseComplete) | |
189 | + .def("send_response", &DmpServerFilterWrap::SendResponse) | |
190 | + .def("server_interface", &DmpServerFilterWrap::server_interface, return_internal_reference<>()); | |
191 | + | |
192 | + class_<DmpServerInterfaceWrap, boost::noncopyable>("DmpServerInterface") | |
193 | + .def("register_filter", pure_virtual(&DmpServerInterface::RegisterFilter)) | |
194 | + .def("request_handler", pure_virtual(&DmpServerInterface::RequestHandler), return_internal_reference<>()) | |
195 | + .def("service_registry", pure_virtual(&DmpServerInterface::ServiceRegistry), return_internal_reference<>()); | |
196 | +} | |
\ No newline at end of file | ... | ... |
请
注册
或
登录
后发表评论