libqi-api  2.4.3.28
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
session.hpp
Go to the documentation of this file.
1 #pragma once
2 /*
3 ** Copyright (C) 2012 Aldebaran Robotics
4 ** See COPYING for the license
5 */
6 
7 #ifndef _QI_MESSAGING_SESSION_HPP_
8 #define _QI_MESSAGING_SESSION_HPP_
9 
10 #include <qi/api.hpp>
14 #include <qi/future.hpp>
15 #include <qi/anyobject.hpp>
16 #include <boost/shared_ptr.hpp>
17 #include <vector>
18 #include <string>
19 
20 #ifdef _MSC_VER
21 # pragma warning( push )
22 # pragma warning( disable: 4251 )
23 #endif
24 
25 namespace qi {
26 
27  class SessionPrivate;
28  class AuthProvider;
29  typedef boost::shared_ptr<AuthProvider> AuthProviderPtr;
30  typedef std::map<std::string, AnyValue> CapabilityMap;
31 
37  class QI_API Session : boost::noncopyable, public ::boost::enable_shared_from_this<Session> {
38  public:
39  Session(bool enforceAuthentication = false);
40  virtual ~Session();
41 
43  ServiceLocality_All = 0,
44  ServiceLocality_Local = 1,
45  ServiceLocality_Remote = 2
46  };
47 
48  //Client
49  qi::FutureSync<void> connect(const char* serviceDirectoryURL);
50  qi::FutureSync<void> connect(const std::string &serviceDirectoryURL);
51  qi::FutureSync<void> connect(const qi::Url &serviceDirectoryURL);
52  bool isConnected() const;
53  qi::Url url() const;
54 
55  qi::FutureSync< std::vector<ServiceInfo> > services(ServiceLocality locality = ServiceLocality_All);
56 
57  qi::FutureSync< qi::AnyObject > service(const std::string &aservice)
58  {
59  return service(aservice, "");
60  }
61 
62  qi::FutureSync< qi::AnyObject > service(const std::string &service,
63  const std::string &protocol);
64 
65  //Server
66  qi::FutureSync<void> listen(const qi::Url &address);
67  std::vector<qi::Url> endpoints() const;
68  bool setIdentity(const std::string& key, const std::string& crt);
69 
70  //close both client and server side
71  qi::FutureSync<void> close();
72 
73  //this create a listen and create a service directory
74  qi::FutureSync<void> listenStandalone(const qi::Url &address);
75 
76  qi::FutureSync<unsigned int> registerService(const std::string &name, AnyObject object);
77  qi::FutureSync<void> unregisterService(unsigned int serviceId);
78 
79 
80  void setAuthProviderFactory(AuthProviderFactoryPtr);
81  void setClientAuthenticatorFactory(ClientAuthenticatorFactoryPtr);
82 
88  void loadService(const std::string& moduleName, const std::string &renameModule = "", const AnyReferenceVector& args = AnyReferenceVector());
89 
90 #define pushi(z, n, _) params.push_back(p ## n);
91 #define genCall(n, ATYPEDECL, ATYPES, ADECL, AUSE, comma) \
92  void loadService( \
93  const std::string& moduleName, const std::string& renameModule, \
94  qi::AutoAnyReference pp0 comma \
95  QI_GEN_ARGSDECLSAMETYPE(n, qi::AutoAnyReference)) \
96  { \
97  std::vector<qi::AnyReference> params; \
98  params.reserve(n+1); \
99  params.push_back(pp0); \
100  BOOST_PP_REPEAT(n, pushi, _) \
101  loadService(moduleName, renameModule, params); \
102  }
104 #undef genCall
105 #undef pushi
106 
110  qi::FutureSync<void> waitForService(const std::string& service);
111 
112  public:
115  // C4251
117  // C4251
119 
120  protected:
121  friend class SessionPrivate;
122  boost::shared_ptr<SessionPrivate> _p;
123  };
124 
125  typedef boost::shared_ptr<Session> SessionPtr;
126 
127  inline SessionPtr makeSession() { return boost::make_shared<qi::Session>(); }
128 }
129 
131 
132 #ifdef _MSC_VER
133 # pragma warning( pop )
134 #endif
135 
136 #endif // _QIMESSAGING_SESSION_HPP_
qi::FutureSync< qi::AnyObject > service(const std::string &aservice)
Definition: session.hpp:57
#define QI_API
Definition: api.hpp:34
SessionPtr makeSession()
Definition: session.hpp:127
qi::Signal< unsigned int, std::string > serviceRegistered
Definition: session.hpp:113
dll import/export and compiler message
qi::Signal< unsigned int, std::string > serviceUnregistered
Definition: session.hpp:114
boost::shared_ptr< ClientAuthenticatorFactory > ClientAuthenticatorFactoryPtr
#define genCall(n, ATYPEDECL, ATYPES, ADECL, AUSE, comma)
Definition: session.hpp:91
std::vector< AnyReference > AnyReferenceVector
qi::Signal connected
Definition: session.hpp:116
boost::shared_ptr< AuthProvider > AuthProviderPtr
std::map< std::string, AnyValue > CapabilityMap
boost::shared_ptr< Session > SessionPtr
Definition: session.hpp:125
boost::shared_ptr< SessionPrivate > _p
Definition: session.hpp:122
qi::Signal< std::string > disconnected
Definition: session.hpp:118
Definition: url.hpp:33
boost::shared_ptr< AuthProviderFactory > AuthProviderFactoryPtr
#define QI_GEN(f)
Definition: preproc.hpp:476
QI_TYPE_ENUM_REGISTER(qi::Session::ServiceLocality)