#ifndef CORE_INTERNAL_BANDWIDTH_UPGRADE_MANAGER_H_ #define CORE_INTERNAL_BANDWIDTH_UPGRADE_MANAGER_H_ #include #include "core/internal/bandwidth_upgrade_handler.h" #include "core/internal/client_proxy.h" #include "core/internal/endpoint_channel_manager.h" #include "core/internal/endpoint_manager.h" #include "core/internal/medium_manager.h" #include "proto/connections/offline_wire_formats.pb.h" #include "platform/api/platform.h" #include "platform/port/string.h" #include "platform/ptr.h" #include "proto/connections_enums.pb.h" namespace location { namespace nearby { namespace connections { // Manages all known {@link BandwidthUpgradeHandler} implementations, delegating // operations to the appropriate one as per the parameters passed in. class BandwidthUpgradeManager : public EndpointManager< platform::ImplementationPlatform>::IncomingOfflineFrameProcessor { public: using Platform = platform::ImplementationPlatform; BandwidthUpgradeManager(Ptr> medium_manager, Ptr endpoint_channel_manager, Ptr> endpoint_manager); ~BandwidthUpgradeManager() override; // This is the point on the initiator side where the // current_bandwidth_upgrade_handler_ is set. void initiateBandwidthUpgradeForEndpoint( Ptr > client_proxy, const string& endpoint_id, proto::connections::Medium medium); // This is the point on the non-initiator side where the // current_bandwidth_upgrade_handler_ is set. // @EndpointManagerReaderThread void processIncomingOfflineFrame( ConstPtr offline_frame, const string& from_endpoint_id, Ptr > to_client_proxy, proto::connections::Medium current_medium) override; // @EndpointManagerReaderThread void processEndpointDisconnection( Ptr > client_proxy, const string& endpoint_id, Ptr process_disconnection_barrier) override; private: bool setCurrentBandwidthUpgradeHandler(proto::connections::Medium medium); Ptr > endpoint_manager_; typedef std::map> BandwidthUpgradeHandlersMap; BandwidthUpgradeHandlersMap bandwidth_upgrade_handlers_; Ptr current_bandwidth_upgrade_handler_; }; } // namespace connections } // namespace nearby } // namespace location #endif // CORE_INTERNAL_BANDWIDTH_UPGRADE_MANAGER_H_