consumer: gather constructor args into Options struct

refs #5069

Change-Id: I4eeacc2045157dd12728dab589538d6994ffcb5a
This commit is contained in:
Junxiao Shi
2023-08-11 16:40:54 +00:00
parent 60e5043d0c
commit 7639daa564
4 changed files with 66 additions and 44 deletions
+19 -13
View File
@@ -27,30 +27,36 @@ namespace psync {
NDN_LOG_INIT(psync.Consumer);
Consumer::Consumer(const ndn::Name& syncPrefix,
ndn::Face& face,
const ReceiveHelloCallback& onReceiveHelloData,
const UpdateCallback& onUpdate,
unsigned int count,
double false_positive = 0.001,
ndn::time::milliseconds helloInterestLifetime,
ndn::time::milliseconds syncInterestLifetime)
Consumer::Consumer(ndn::Face& face, const ndn::Name& syncPrefix, const Options& opts)
: m_face(face)
, m_scheduler(m_face.getIoContext())
, m_syncPrefix(syncPrefix)
, m_helloInterestPrefix(ndn::Name(m_syncPrefix).append("hello"))
, m_syncInterestPrefix(ndn::Name(m_syncPrefix).append("sync"))
, m_syncDataContentType(ndn::tlv::ContentType_Blob)
, m_onReceiveHelloData(onReceiveHelloData)
, m_onUpdate(onUpdate)
, m_bloomFilter(count, false_positive)
, m_helloInterestLifetime(helloInterestLifetime)
, m_syncInterestLifetime(syncInterestLifetime)
, m_onReceiveHelloData(opts.onHelloData)
, m_onUpdate(opts.onUpdate)
, m_bloomFilter(opts.bfCount, opts.bfFalsePositive)
, m_helloInterestLifetime(opts.helloInterestLifetime)
, m_syncInterestLifetime(opts.syncInterestLifetime)
, m_rng(ndn::random::getRandomNumberEngine())
, m_rangeUniformRandom(100, 500)
{
}
Consumer::Consumer(const ndn::Name& syncPrefix,
ndn::Face& face,
const ReceiveHelloCallback& onReceiveHelloData,
const UpdateCallback& onUpdate,
unsigned int count,
double falsePositive,
ndn::time::milliseconds helloInterestLifetime,
ndn::time::milliseconds syncInterestLifetime)
: Consumer(face, syncPrefix,
Options{onReceiveHelloData, onUpdate, count, falsePositive, helloInterestLifetime, syncInterestLifetime})
{
}
bool
Consumer::addSubscription(const ndn::Name& prefix, uint64_t seqNo, bool callSyncDataCb)
{
+28 -11
View File
@@ -56,23 +56,40 @@ class Consumer
{
public:
/**
* @brief constructor
*
* @param syncPrefix syncPrefix to send hello/sync interests to producer
* @param face application's face
* @param onReceiveHelloData call back to give hello data back to application
* @param onUpdate call back to give sync data back to application
* @param count bloom filter number of expected elements (subscriptions) in bloom filter
* @param false_positive bloom filter false positive probability
* @param helloInterestLifetime lifetime of hello interest
* @param syncInterestLifetime lifetime of sync interest
* @brief Constructor options.
*/
struct Options
{
/// Callback to give hello data back to application.
ReceiveHelloCallback onHelloData = [] (const auto&) {};
/// Callback to give sync data back to application.
UpdateCallback onUpdate = [] (const auto&) {};
/// Number of expected elements (subscriptions) in Bloom filter.
unsigned int bfCount = 80;
/// Bloom filter false positive probability.
double bfFalsePositive = 0.001;
/// Lifetime of hello Interest.
ndn::time::milliseconds helloInterestLifetime = HELLO_INTEREST_LIFETIME;
/// Lifetime of sync Interest.
ndn::time::milliseconds syncInterestLifetime = SYNC_INTEREST_LIFETIME;
};
/**
* @brief Constructor.
*
* @param face Application face.
* @param syncPrefix Prefix to send hello and sync Interests to producer.
* @param opts Options.
*/
Consumer(ndn::Face& face, const ndn::Name& syncPrefix, const Options& opts);
[[deprecated]]
Consumer(const ndn::Name& syncPrefix,
ndn::Face& face,
const ReceiveHelloCallback& onReceiveHelloData,
const UpdateCallback& onUpdate,
unsigned int count,
double false_positive,
double falsePositive = 0.001,
ndn::time::milliseconds helloInterestLifetime = HELLO_INTEREST_LIFETIME,
ndn::time::milliseconds syncInterestLifetime = SYNC_INTEREST_LIFETIME);
+8 -8
View File
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2014-2022, The University of Memphis
* Copyright (c) 2014-2023, The University of Memphis
*
* This file is part of PSync.
* See AUTHORS.md for complete list of PSync authors and contributors.
@@ -32,18 +32,18 @@ class PSyncConsumer
public:
/**
* @brief Initialize consumer and start hello process
*
* 0.001 is the false positive probability of the bloom filter
*
* @param syncPrefix should be the same as producer
* @param nSub number of subscriptions is used for the bloom filter (subscription list) size
*/
PSyncConsumer(const ndn::Name& syncPrefix, int nSub)
: m_nSub(nSub)
, m_consumer(syncPrefix, m_face,
std::bind(&PSyncConsumer::afterReceiveHelloData, this, _1),
std::bind(&PSyncConsumer::processSyncUpdate, this, _1),
m_nSub, 0.001)
, m_consumer(m_face, syncPrefix, [this] {
psync::Consumer::Options opts;
opts.onHelloData = std::bind(&PSyncConsumer::afterReceiveHelloData, this, _1);
opts.onUpdate = std::bind(&PSyncConsumer::processSyncUpdate, this, _1);
opts.bfCount = m_nSub;
return opts;
} ())
{
// This starts the consumer side by sending a hello interest to the producer
// When the producer responds with hello data, afterReceiveHelloData is called
+11 -12
View File
@@ -33,10 +33,9 @@ BOOST_AUTO_TEST_SUITE(TestConsumer)
BOOST_AUTO_TEST_CASE(AddSubscription)
{
ndn::DummyClientFace face;
Consumer consumer(Name("/psync"), face,
[] (const auto&) {},
[] (const auto&) {},
40, 0.001);
Consumer::Options opts;
opts.bfCount = 40;
Consumer consumer(face, "/psync", opts);
Name subscription("test");
@@ -48,10 +47,9 @@ BOOST_AUTO_TEST_CASE(AddSubscription)
BOOST_AUTO_TEST_CASE(RemoveSubscription)
{
ndn::DummyClientFace face;
Consumer consumer(Name("/psync"), face,
[] (const auto&) {},
[] (const auto&) {},
40, 0.001);
Consumer::Options opts;
opts.bfCount = 40;
Consumer consumer(face, "/psync", opts);
Name subscription("test");
consumer.addSubscription(subscription, 0);
@@ -65,10 +63,11 @@ BOOST_AUTO_TEST_CASE(RemoveSubscription)
BOOST_FIXTURE_TEST_CASE(ConstantTimeoutForFirstSegment, tests::IoFixture)
{
ndn::DummyClientFace face(m_io);
Consumer consumer(Name("/psync"), face,
[] (const auto&) {},
[] (const auto&) {},
40, 0.001, 4_s, 4_s);
Consumer::Options opts;
opts.bfCount = 40;
opts.helloInterestLifetime = 4_s;
opts.syncInterestLifetime = 4_s;
Consumer consumer(face, "/psync", opts);
consumer.sendHelloInterest();
advanceClocks(4_s);