libalcommon  1.14
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
alproxy.h
Go to the documentation of this file.
1 
10 #pragma once
11 #ifndef _LIBALCOMMON_ALCOMMON_ALPROXY_H_
12 #define _LIBALCOMMON_ALCOMMON_ALPROXY_H_
13 
14 # include <alcommon/almoduleinfo.h>
15 # include <alcommon/almodule.h>
16 # include <alcommon/detail/altaskinfo.h>
17 # include <alcommon/alfunctor.h>
18 
19 # include <alerror/alerror.h>
20 
21 # include <boost/shared_ptr.hpp>
22 # include <boost/smart_ptr/enable_shared_from_this.hpp>
23 
24 #ifdef _WIN32
25 # pragma warning(disable:4996)
26 # pragma warning(disable:4800)
27 #endif
28 
29 namespace AL
30 {
31  class ALProxyImpl;
32 
33  namespace detail {
34  class PCallBase;
35  }
36 
65  class ALProxy : public ::boost::enable_shared_from_this<ALProxy>
66  {
67  public:
73  typedef boost::shared_ptr<ALProxy> Ptr;
79  typedef boost::weak_ptr<ALProxy> WeakPtr;
80 
81  typedef int (*onFinishedCallback)(const char*, int, const AL::ALValue &);
82 
87  boost::shared_ptr<ALProxy> getThis();
92  boost::shared_ptr<const ALProxy> getThis() const;
93 
99  {
100  NO_OPTION = 0,
104  };
105 
106  ALProxy(const ALProxy &rhs);
107  const ALProxy &operator=(const ALProxy &rhs);
108 
109  public:
117  ALProxy(boost::shared_ptr<ALBroker> pBroker,
118  const std::string &pModuleName,
119  int pProxyMask = 0,
120  int timeout = 0);
129  ALProxy(const std::string &pModuleName,
130  const std::string &pIp,
131  int pPort,
132  int pProxyMask = 0,
133  int timeout = 0);
143  ALProxy(const std::string &pModuleName,
144  const std::string &pIp,
145  int pPort,
146  boost::shared_ptr<ALBroker> pBroker,
147  int pProxyMask = 0,
148  int timeout = 0);
155  ALProxy(const std::string &pModuleName,
156  int pProxyOption,
157  int pTimeout);
158 
160  virtual ~ALProxy(void);
161 
165  std::string remoteBrokerName();
166 
178  AL::ALValue genericCall(const std::string &strMethodName,
179  const AL::ALValue &listParams);
180 
181 
199  int genericPCall(const std::string &strMethodName,
200  const AL::ALValue &listParams,
201  onFinishedCallback pCallbackToCallOnFinished = NULL,
202  const char *pszCallerName = NULL);
203 
208  std::string version();
209 
214  boost::shared_ptr<ALModule> getModule() const;
219  boost::shared_ptr<ALModuleCore> getModuleCore() const;
220 
226  int getInfo(ALModuleInfo &pModuleInfo);
227 
232  bool isLocal();
233 
240  bool isValid();
241 
248  boost::shared_ptr<ALFunctorBase> getFunctor(const std::string &pName,
249  const std::vector<std::string> &pParamTypes);
250 
255  boost::shared_ptr<ALBroker> getParentBroker(void) const;
256 
260  void destroyConnection(void);
261 
262  template <typename R>
263  R call(const std::string &pName);
264 
265  template <typename R, typename P1>
266  R call(const std::string &pName, const P1 &p1);
267 
268  template <typename R, typename P1, typename P2>
269  R call(const std::string &pName, const P1 &p1, const P2 &p2);
270 
271  template <typename R, typename P1, typename P2, typename P3>
272  R call(const std::string &pName, const P1 &p1, const P2 &p2, const P3 &p3);
273 
274  template <typename R, typename P1, typename P2, typename P3, typename P4>
275  R call(const std::string &pName, const P1 &p1, const P2 &p2, const P3 &p3, const P4 &p4);
276 
277  template <typename R, typename P1, typename P2, typename P3, typename P4, typename P5>
278  R call(const std::string &pName, const P1 &p1, const P2 &p2, const P3 &p3, const P4 &p4, const P5 &p5);
279 
280  template <typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
281  R call(const std::string &pName, const P1 &p1, const P2 &p2, const P3 &p3, const P4 &p4, const P5 &p5, const P6 &p6);
282 
283  inline void callVoid(const std::string &pName);
284 
285  template <typename P1>
286  void callVoid(const std::string &pName, const P1 &p1);
287 
288  template <typename P1, typename P2>
289  void callVoid(const std::string &pName, const P1 &p1, const P2 &p2);
290 
291  template <typename P1, typename P2, typename P3>
292  void callVoid(const std::string &pName, const P1 &p1, const P2 &p2, const P3 &p3);
293 
294  template <typename P1, typename P2, typename P3, typename P4>
295  void callVoid(const std::string &pName, const P1 &p1, const P2 &p2, const P3 &p3, const P4 &p4);
296 
297  template <typename P1, typename P2, typename P3, typename P4, typename P5>
298  void callVoid(const std::string &pName, const P1 &p1, const P2 &p2, const P3 &p3, const P4 &p4, const P5 &p5);
299 
300  template <typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
301  void callVoid(const std::string &pName, const P1 &p1, const P2 &p2, const P3 &p3, const P4 &p4, const P5 &p5, const P6 &p6);
302 
303  inline int pCall(const std::string &pName);
304 
305  template <typename P1>
306  int pCall(const std::string &pName, const P1 &p1);
307 
308  template <typename P1, typename P2>
309  int pCall(const std::string &pName, const P1 &p1, const P2 &p2);
310 
311  template <typename P1, typename P2, typename P3>
312  int pCall(const std::string &pName, const P1 &p1, const P2 &p2, const P3 &p3);
313 
314  template <typename P1, typename P2, typename P3, typename P4>
315  int pCall(const std::string &pName, const P1 &p1, const P2 &p2, const P3 &p3, const P4 &p4);
316 
317  template <typename P1, typename P2, typename P3, typename P4, typename P5>
318  int pCall(const std::string &pName, const P1 &p1, const P2 &p2, const P3 &p3, const P4 &p4, const P5 &p5);
319 
320  template <typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
321  int pCall(const std::string &pName, const P1 &p1, const P2 &p2, const P3 &p3, const P4 &p4, const P5 &p5, const P6 &p6);
322 
323 
334  bool wait(const int &id, const int &timeoutPeriod);
335 
341  void stop(const int &id);
342 
349  bool isRunning(const int &id);
350 
357  int pCallNotify(const std::string &name,
358  const std::string &key,
359  const ALValue &value,
360  const ALValue &message = std::string());
361 
362  protected:
363  void CALL_METHODS(const std::string &szMethodName,
364  const AL::ALValue &param,
365  AL::ALValue &result);
366  void PCALL_METHODSNoID(const std::string &szMethodName,
367  const AL::ALValue &param,
368  AL::ALValue &result);
369  void PCALL_METHODS(const std::string &szMethodName,
370  const AL::ALValue &param,
371  AL::ALValue &result);
374  private:
381  bool isScript(void);
382  void init(boost::shared_ptr<ALBroker> pBroker,
383  const std::string &pModuleName,
384  int pProxyMask = 0,
385  int timeout = 0);
386  void init(const std::string& pModuleName,
387  const std::string& pIpParam,
388  int pPort,
389  boost::shared_ptr<ALBroker> pBroker,
390  int pProxyOption,
391  int timeout);
392 
393  int xGetFreeTaskUID(void);
394  std::string xCleanEndpointAddress(const std::string &pEndpoint);
395  AL::ALValue xWaitIfNecessary(AL::ALValue result);
396 
397  boost::shared_ptr<detail::ALTaskInfo> xCreateTaskInfo(const std::string pMethodName);
398  void xAddTask(const std::string &name, detail::PCallBase *pcall);
399  ALMethodInfo* xLookupMethod(const std::string &pName);
400  ALMethodInfo* xLookupMethod(const std::string &pMethodName,
401  const AL::ALValue &pParams);
402  ALMethodInfo* xLookupMethod(const std::string &pMethodName,
403  const std::vector<std::string> &pParams,
404  bool softCompare);
405  const std::string& xGetModuleName();
406  void xExecute(const std::string &pMethod,
407  const ALValue &pParams,
408  ALValue &pResult);
409 
410  int xPCallScript(const std::string &name,
411  const ALValue &param);
412 
413  private:
415  ALProxyImpl *_private;
416 
417  }; // ALProxy
418 } // namespace AL
419 
420 #include <alcommon/alproxy.hxx>
421 
422 #endif // _LIBALCOMMON_ALCOMMON_ALPROXY_H_
423