29 #ifndef PT_REMOTING_ACTIVEPROCEDURE_H
30 #define PT_REMOTING_ACTIVEPROCEDURE_H
32 #include <Pt/Remoting/Api.h>
33 #include <Pt/Remoting/ServiceProcedure.h>
34 #include <Pt/System/EventLoop.h>
35 #include <Pt/Decomposer.h>
36 #include <Pt/Composer.h>
45 template <
typename R,
74 , _a1(&resp.context())
75 , _a2(&resp.context())
76 , _a3(&resp.context())
77 , _a4(&resp.context())
78 , _a5(&resp.context())
79 , _a6(&resp.context())
80 , _a7(&resp.context())
81 , _a8(&resp.context())
82 , _a9(&resp.context())
83 , _a10(&resp.context())
118 onInvoke(loop, _v1, _v2, _v3, _v4, _v5, _v6, _v7, _v8, _v9, _v10);
123 const R& r = onResult();
130 const A1& a1,
const A2& a2,
131 const A3& a3,
const A4& a4,
132 const A5& a5,
const A6& a6,
133 const A7& a7,
const A8& a8,
134 const A9& a9,
const A10& a10) = 0;
136 virtual const R& onResult() = 0;
165 template <
typename R,
175 class ActiveProcedure<R, A1, A2, A3, A4, A5, A6, A7, A8, A9,
194 , _a1(&resp.context())
195 , _a2(&resp.context())
196 , _a3(&resp.context())
197 , _a4(&resp.context())
198 , _a5(&resp.context())
199 , _a6(&resp.context())
200 , _a7(&resp.context())
201 , _a8(&resp.context())
202 , _a9(&resp.context())
203 , _r(&resp.context())
233 virtual void onBeginCall(System::EventLoop& loop)
235 onInvoke(loop, _v1, _v2, _v3, _v4, _v5, _v6, _v7, _v8, _v9);
238 Decomposer* onEndCall()
240 const R& r = onResult();
246 virtual void onInvoke(System::EventLoop& loop,
247 const A1& a1,
const A2& a2,
248 const A3& a3,
const A4& a4,
249 const A5& a5,
const A6& a6,
250 const A7& a7,
const A8& a8,
253 virtual const R& onResult() = 0;
267 BasicComposer<A1> _a1;
268 BasicComposer<A2> _a2;
269 BasicComposer<A3> _a3;
270 BasicComposer<A4> _a4;
271 BasicComposer<A5> _a5;
272 BasicComposer<A6> _a6;
273 BasicComposer<A7> _a7;
274 BasicComposer<A8> _a8;
275 BasicComposer<A9> _a9;
276 BasicDecomposer<R> _r;
280 template <
typename R,
289 class ActiveProcedure<R, A1, A2, A3, A4, A5, A6, A7, A8,
307 ActiveProcedure(Responder& resp)
309 , _a1(&resp.context())
310 , _a2(&resp.context())
311 , _a3(&resp.context())
312 , _a4(&resp.context())
313 , _a5(&resp.context())
314 , _a6(&resp.context())
315 , _a7(&resp.context())
316 , _a8(&resp.context())
317 , _r(&resp.context())
331 Composer** onBeginArgs()
345 virtual void onBeginCall(System::EventLoop& loop)
347 onInvoke(loop, _v1, _v2, _v3, _v4, _v5, _v6, _v7, _v8);
350 Decomposer* onEndCall()
352 const R& r = onResult();
358 virtual void onInvoke(System::EventLoop& loop,
359 const A1& a1,
const A2& a2,
360 const A3& a3,
const A4& a4,
361 const A5& a5,
const A6& a6,
362 const A7& a7,
const A8& a8) = 0;
364 virtual const R& onResult() = 0;
377 BasicComposer<A1> _a1;
378 BasicComposer<A2> _a2;
379 BasicComposer<A3> _a3;
380 BasicComposer<A4> _a4;
381 BasicComposer<A5> _a5;
382 BasicComposer<A6> _a6;
383 BasicComposer<A7> _a7;
384 BasicComposer<A8> _a8;
385 BasicDecomposer<R> _r;
389 template <
typename R,
397 class ActiveProcedure<R, A1, A2, A3, A4, A5, A6, A7,
416 ActiveProcedure(Responder& resp)
418 , _a1(&resp.context())
419 , _a2(&resp.context())
420 , _a3(&resp.context())
421 , _a4(&resp.context())
422 , _a5(&resp.context())
423 , _a6(&resp.context())
424 , _a7(&resp.context())
425 , _r(&resp.context())
438 Composer** onBeginArgs()
451 virtual void onBeginCall(System::EventLoop& loop)
453 onInvoke(loop, _v1, _v2, _v3, _v4, _v5, _v6, _v7);
456 Decomposer* onEndCall()
458 const R& r = onResult();
464 virtual void onInvoke(System::EventLoop& loop,
465 const A1& a1,
const A2& a2,
466 const A3& a3,
const A4& a4,
467 const A5& a5,
const A6& a6,
470 virtual const R& onResult() = 0;
482 BasicComposer<A1> _a1;
483 BasicComposer<A2> _a2;
484 BasicComposer<A3> _a3;
485 BasicComposer<A4> _a4;
486 BasicComposer<A5> _a5;
487 BasicComposer<A6> _a6;
488 BasicComposer<A7> _a7;
489 BasicDecomposer<R> _r;
493 template <
typename R,
500 class ActiveProcedure<R, A1, A2, A3, A4, A5, A6,
520 ActiveProcedure(Responder& resp)
522 , _a1(&resp.context())
523 , _a2(&resp.context())
524 , _a3(&resp.context())
525 , _a4(&resp.context())
526 , _a5(&resp.context())
527 , _a6(&resp.context())
528 , _r(&resp.context())
540 Composer** onBeginArgs()
552 virtual void onBeginCall(System::EventLoop& loop)
554 onInvoke(loop, _v1, _v2, _v3, _v4, _v5, _v6);
557 Decomposer* onEndCall()
559 const R& r = onResult();
565 virtual void onInvoke(System::EventLoop& loop,
566 const A1& a1,
const A2& a2,
567 const A3& a3,
const A4& a4,
568 const A5& a5,
const A6& a6) = 0;
570 virtual const R& onResult() = 0;
581 BasicComposer<A1> _a1;
582 BasicComposer<A2> _a2;
583 BasicComposer<A3> _a3;
584 BasicComposer<A4> _a4;
585 BasicComposer<A5> _a5;
586 BasicComposer<A6> _a6;
587 BasicDecomposer<R> _r;
591 template <
typename R,
597 class ActiveProcedure<R, A1, A2, A3, A4, A5,
618 ActiveProcedure(Responder& resp)
620 , _a1(&resp.context())
621 , _a2(&resp.context())
622 , _a3(&resp.context())
623 , _a4(&resp.context())
624 , _a5(&resp.context())
625 , _r(&resp.context())
666 Composer** onBeginArgs()
677 virtual void onBeginCall(System::EventLoop& loop)
679 onInvoke(loop, _v1, _v2, _v3, _v4, _v5);
682 Decomposer* onEndCall()
684 const R& r = onResult();
690 virtual void onInvoke(System::EventLoop& loop,
691 const A1& a1,
const A2& a2,
692 const A3& a3,
const A4& a4,
695 virtual const R& onResult() = 0;
705 BasicComposer<A1> _a1;
706 BasicComposer<A2> _a2;
707 BasicComposer<A3> _a3;
708 BasicComposer<A4> _a4;
709 BasicComposer<A5> _a5;
710 BasicDecomposer<R> _r;
714 template <
typename R,
719 class ActiveProcedure<R, A1, A2, A3, A4,
741 ActiveProcedure(Responder& resp)
743 , _a1(&resp.context())
744 , _a2(&resp.context())
745 , _a3(&resp.context())
746 , _a4(&resp.context())
747 , _r(&resp.context())
781 Composer** onBeginArgs()
791 virtual void onBeginCall(System::EventLoop& loop)
793 onInvoke(loop, _v1, _v2, _v3, _v4);
796 Decomposer* onEndCall()
798 const R& r = onResult();
804 virtual void onInvoke(System::EventLoop& loop,
805 const A1& a1,
const A2& a2,
806 const A3& a3,
const A4& a4) = 0;
808 virtual const R& onResult() = 0;
817 BasicComposer<A1> _a1;
818 BasicComposer<A2> _a2;
819 BasicComposer<A3> _a3;
820 BasicComposer<A4> _a4;
821 BasicDecomposer<R> _r;
825 template <
typename R,
829 class ActiveProcedure<R, A1, A2, A3,
852 ActiveProcedure(Responder& resp)
854 , _a1(&resp.context())
855 , _a2(&resp.context())
856 , _a3(&resp.context())
857 , _r(&resp.context())
885 Composer** onBeginArgs()
894 virtual void onBeginCall(System::EventLoop& loop)
896 onInvoke(loop, _v1, _v2, _v3);
899 Decomposer* onEndCall()
901 const R& r = onResult();
907 virtual void onInvoke(System::EventLoop& loop,
908 const A1& a1,
const A2& a2,
911 virtual const R& onResult() = 0;
919 BasicComposer<A1> _a1;
920 BasicComposer<A2> _a2;
921 BasicComposer<A3> _a3;
922 BasicDecomposer<R> _r;
926 template <
typename R,
929 class ActiveProcedure<R, A1, A2,
953 ActiveProcedure(Responder& resp)
955 , _a1(&resp.context())
956 , _a2(&resp.context())
957 , _r(&resp.context())
977 Composer** onBeginArgs()
985 virtual void onBeginCall(System::EventLoop& loop)
987 onInvoke(loop, _v1, _v2);
990 Decomposer* onEndCall()
992 const R& r = onResult();
998 virtual void onInvoke(System::EventLoop& loop,
999 const A1& a1,
const A2& a2) = 0;
1001 virtual const R& onResult() = 0;
1008 BasicComposer<A1> _a1;
1009 BasicComposer<A2> _a2;
1010 BasicDecomposer<R> _r;
1014 template <
typename R,
1016 class ActiveProcedure<R, A1,
1025 Pt::Void> :
public ServiceProcedure
1041 ActiveProcedure(Responder& resp)
1043 , _a1(&resp.context())
1044 , _r(&resp.context())
1053 const A1& a1()
const
1057 Composer** onBeginArgs()
1063 virtual void onBeginCall(System::EventLoop& loop)
1065 onInvoke(loop, _v1);
1068 Decomposer* onEndCall()
1070 const R& r = onResult();
1076 virtual void onInvoke(System::EventLoop& loop,
const A1& a1) = 0;
1078 virtual const R& onResult() = 0;
1083 BasicComposer<A1> _a1;
1084 BasicDecomposer<R> _r;
1088 template <
typename R>
1089 class ActiveProcedure<R,
1099 Pt::Void> :
public ServiceProcedure
1115 ActiveProcedure(Responder& resp)
1117 , _r( &resp.context() )
1123 Composer** onBeginArgs()
1128 virtual void onBeginCall(System::EventLoop& loop)
1133 Decomposer* onEndCall()
1135 const R& r = onResult();
1141 virtual void onInvoke(System::EventLoop& loop) = 0;
1143 virtual const R& onResult() = 0;
1147 BasicDecomposer<R> _r;
1151 template <
typename CallT>
1152 class ActiveProcedureDef :
public ServiceProcedureDef
1155 ActiveProcedureDef(
const Callable<CallT*, Responder&>& cb)
1161 ~ActiveProcedureDef()
1167 virtual ServiceProcedure* onCreateProcedure(Responder& resp)
const
1169 typedef typename CallT::ReturnT R;
1170 typedef typename CallT::Arg1T A1;
1171 typedef typename CallT::Arg2T A2;
1172 typedef typename CallT::Arg3T A3;
1173 typedef typename CallT::Arg4T A4;
1174 typedef typename CallT::Arg5T A5;
1175 typedef typename CallT::Arg6T A6;
1176 typedef typename CallT::Arg7T A7;
1177 typedef typename CallT::Arg8T A8;
1178 typedef typename CallT::Arg9T A9;
1179 typedef typename CallT::Arg10T A10;
1181 ActiveProcedure<R, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>* proc = _cb->call(resp);
1186 const Callable<CallT*, Responder&>* _cb;
1193 #endif // PT_REMOTING_ACTIVEPROCEDURE_H