17 #ifndef ENDPOINTREGISTRATIONMANAGER_HPP_ 
   18 #define ENDPOINTREGISTRATIONMANAGER_HPP_ 
   24 #include <boost/signals2.hpp> 
   25 #include <boost/shared_ptr.hpp> 
   26 #include <boost/thread/recursive_mutex.hpp> 
   39 class UserAttachRequest;
 
   40 class IAttachedEndpointListListener;
 
   51         return endpointAccessToken_;
 
   62     virtual void attachUser(
const std::string& userExternalId
 
   63                           , 
const std::string& userAccessToken
 
   76     virtual void onUserAttach(
const UserSyncResponse::userAttachResponse_t& response);
 
   78     virtual void onEndpointsAttach(
const std::vector<EndpointAttachResponse>& endpoints);
 
   79     virtual void onEndpointsDetach(
const std::vector<EndpointDetachResponse>& endpoints);
 
   85         return status_->getEndpointAttachStatus();
 
   89         userTransport_ = transport;
 
   90         if (userTransport_ != 
nullptr && (userAttachRequest_.get() != 
nullptr || !attachingEndpoints_.empty() || !detachingEndpoints_.empty())) {
 
   91             userTransport_->
sync();
 
   96         if (listener != 
nullptr) {
 
   97             attachStatusListener_ = listener;
 
  102     void onEndpointAccessTokenChanged(
const std::string& old);
 
  105     struct EndpointOperationInfo {
 
  106         std::string endpointData_;
 
  112     typedef boost::recursive_mutex              mutex_type;
 
  113     typedef boost::unique_lock<mutex_type>      lock_type;
 
  117     std::string endpointAccessToken_;
 
  118     std::string endpointKeyHash_;
 
  122     std::map<std::string, EndpointOperationInfo>  attachingEndpoints_;
 
  123     std::map<std::string, EndpointOperationInfo>  detachingEndpoints_;
 
  124     std::map<std::string, std::string>    attachedEndpoints_;
 
  125     mutex_type                                                 endpointsGuard_;
 
  127     UserTransport *                                            userTransport_;
 
  129     boost::signals2::signal<void (const AttachedEndpoints&)>   attachedEPListListeners;
 
  130     mutex_type                                                 listenerGuard_;
 
  132     IEndpointAttachStatusListener*                             attachStatusListener_;
 
virtual void onEndpointsDetach(const std::vector< EndpointDetachResponse > &endpoints)
 
virtual void onCurrentEndpointDetach(const UserDetachNotification &response)
 
std::map< std::string, std::string > AttachedEndpoints
 
virtual void detachEndpoint(const std::string &endpointKeyHash, IEndpointAttachStatusListener *listener=nullptr)
 
boost::shared_ptr< IKaaClientStateStorage > IKaaClientStateStoragePtr
 
virtual const AttachedEndpoints & getAttachedEndpoints()
 
virtual void setAttachStatusListener(IEndpointAttachStatusListener *listener)
 
EndpointRegistrationManager(IKaaClientStateStoragePtr status)
 
virtual void onEndpointsAttach(const std::vector< EndpointAttachResponse > &endpoints)
 
boost::shared_ptr< UserAttachRequest > UserAttachRequestPtr
 
virtual std::map< std::string, std::string > getEndpointsToDetach()
 
virtual void addAttachedEndpointListListener(IAttachedEndpointListListener *listener)
 
virtual void onCurrentEndpointAttach(const UserAttachNotification &response)
 
virtual void removeAttachedEndpointListListener(IAttachedEndpointListListener *listener)
 
virtual void attachUser(const std::string &userExternalId, const std::string &userAccessToken, IEndpointAttachStatusListener *listener=nullptr)
 
virtual void regenerateEndpointAccessToken()
 
virtual void setTransport(UserTransport *transport)
 
virtual void onUserAttach(const UserSyncResponse::userAttachResponse_t &response)
 
virtual void attachEndpoint(const std::string &endpointAccessToken, IEndpointAttachStatusListener *listener=nullptr)
 
virtual bool isCurrentEndpointAttached()
 
virtual const std::string & getEndpointAccessToken()
 
virtual UserAttachRequestPtr getUserAttachRequest()
 
virtual std::map< std::string, std::string > getEndpointsToAttach()