50      std::shared_ptr<ndn::svs::SVSPubSub> svsPubSub,
 
   51      const std::string &nodePrefix, 
const std::string &syncPrefix,
 
   52      const std::string &upstreamEdgeName, uint32_t numberOfPartitions,
 
   53      std::optional<std::shared_ptr<CongestionReporter>> congestionReporter);
 
   57  void pushData(
const std::vector<uint8_t> &data);
 
   59  void setTopicPartitions(uint64_t numberOfPartitions);
 
   64  uint32_t getNextPartitionNumber();
 
   66  void reportCongestion(CongestionReason congestionReason);
 
   68  void saveTimestamp(std::chrono::steady_clock::time_point timestamp);
 
   70  void cleanUpTimestamps(
 
   71      std::chrono::time_point<std::chrono::steady_clock> referenceTimepoint);
 
   73  ndn::Name prepareDataName(uint32_t partitionNumber);
 
   75  uint64_t determineIdleTime(
 
   76      std::chrono::time_point<std::chrono::steady_clock> referenceTimepoint);
 
   78  void setupBackchannel();
 
   81  const std::weak_ptr<ndn::svs::SVSPubSub> m_svsPubSub;
 
   83  const std::string m_pubTopic;
 
   85  std::string m_nodePrefix;
 
   87  std::string m_syncPrefix;
 
   89  uint32_t m_numberOfPartitions;
 
   90  std::unordered_set<uint32_t> m_topicPartitions;
 
   92  std::mt19937 m_randomNumberGenerator;
 
   94  std::optional<std::shared_ptr<CongestionReporter>> m_congestionReporter;
 
   96  std::deque<std::chrono::time_point<std::chrono::steady_clock>>
 
   97      m_productionTimestamps;
 
  100  std::chrono::seconds m_maxProductionTimestampAge = std::chrono::seconds(1);
 
  102  const std::string &m_downstreamEdgeName;
 
  104  std::chrono::time_point<std::chrono::steady_clock> m_idleSince;