SPSP
Simple publish-subscribe protocol. Connects low power IoT clients to MQTT.
All Classes Files Functions Variables Typedefs Enumerations
Classes | Public Types | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | List of all members
SPSP::Nodes::Bridge< TLocalLayer, TFarLayer > Class Template Reference

Bridge node. More...

#include <bridge.hpp>

Inheritance diagram for SPSP::Nodes::Bridge< TLocalLayer, TFarLayer >:
Inheritance graph
[legend]
Collaboration diagram for SPSP::Nodes::Bridge< TLocalLayer, TFarLayer >:
Collaboration graph
[legend]

Classes

struct  SubDBEntry
 Bridge subscribe entry. More...
 

Public Types

using LocalAddrT = typename TLocalLayer::LocalAddrT
 
using LocalMessageT = typename TLocalLayer::LocalMessageT
 

Public Member Functions

 Bridge (TLocalLayer *ll, TFarLayer *fl, BridgeConfig conf={})
 Construct a new bridge object. More...
 
 ~Bridge ()
 Destroys the bridge node. More...
 
bool receiveFar (const std::string &topic, const std::string &payload)
 Receives the message from far layer. More...
 
bool publish (const std::string &topic, const std::string &payload)
 Publishes payload to topic. More...
 
bool subscribe (const std::string &topic, SubscribeCb cb)
 Subscribes to topic. More...
 
void resubscribeAll ()
 Resubscribes to all topics. More...
 
bool unsubscribe (const std::string &topic)
 Unsubscribes from topic. More...
 
- Public Member Functions inherited from SPSP::ILocalAndFarNode< TLocalLayer, TFarLayer >
 ILocalAndFarNode (TLocalLayer *ll, TFarLayer *fl)
 Constructs a new node. More...
 
- Public Member Functions inherited from SPSP::ILocalNode< TLocalLayer >
 ILocalNode (TLocalLayer *ll)
 Constructs a new node. More...
 
void receiveLocal (const LocalMessageT &msg, int rssi=NODE_RSSI_UNKNOWN)
 Receives the message from local layer. More...
 
void setLocalRecvSendCb (LocalRecvSendCb cb)
 Sets local receive/send callback function. More...
 
- Public Member Functions inherited from SPSP::IFarNode< TFarLayer >
 IFarNode (TFarLayer *fl)
 Constructs a new node. More...
 

Protected Types

using SubDBMapT = std::unordered_map< LocalAddrT, SubDBEntry >
 

Protected Member Functions

bool processProbeReq (const LocalMessageT &req, int rssi=NODE_RSSI_UNKNOWN)
 Processes PROBE_REQ message. More...
 
bool processProbeRes (const LocalMessageT &req, int rssi=NODE_RSSI_UNKNOWN)
 Processes PROBE_RES message. More...
 
bool processPub (const LocalMessageT &req, int rssi=NODE_RSSI_UNKNOWN)
 Processes PUB message. More...
 
bool processSubReq (const LocalMessageT &req, int rssi=NODE_RSSI_UNKNOWN)
 Processes SUB_REQ message. More...
 
bool processSubData (const LocalMessageT &req, int rssi=NODE_RSSI_UNKNOWN)
 Processes SUB_DATA message. More...
 
bool processUnsub (const LocalMessageT &req, int rssi=NODE_RSSI_UNKNOWN)
 Processes UNSUB message. More...
 
bool processTimeReq (const LocalMessageT &req, int rssi=NODE_RSSI_UNKNOWN)
 Processes TIME_REQ message. More...
 
bool processTimeRes (const LocalMessageT &req, int rssi=NODE_RSSI_UNKNOWN)
 Processes TIME_RES message. More...
 
bool publishSubData (const LocalAddrT &addr, const std::string &topic, const std::string &payload)
 Publishes received subscription data to local layer node. More...
 
void subDBTick ()
 Subscribe DB timer tick callback. More...
 
void subDBDecrementLifetimes ()
 Decrements lifetimes of entries. More...
 
void subDBRemoveExpiredEntries ()
 Removes expired entries. More...
 
void subDBRemoveUnusedTopics ()
 Removes and unsubscribes from unused topics. More...
 
- Protected Member Functions inherited from SPSP::ILocalNode< TLocalLayer >
TLocalLayer * getLocalLayer () const
 Gets the far layer object. More...
 
bool sendLocal (const LocalMessageT &msg)
 Sends the message to local layer. More...
 
void publishRssi (const LocalAddrT &addr, int rssi)
 Publishes RSSI of received message from addr More...
 
- Protected Member Functions inherited from SPSP::IFarNode< TFarLayer >
TFarLayer * getFarLayer () const
 Gets the far layer object. More...
 

Protected Attributes

std::mutex m_mutex
 Mutex to prevent race conditions.
 
BridgeConfig m_conf
 Configuration.
 
WildcardTrie< SubDBMapT > m_subDB
 Subscribe database.
 
Timer m_subDBTimer
 Sub DB timer.
 

Detailed Description

template<typename TLocalLayer, typename TFarLayer>
class SPSP::Nodes::Bridge< TLocalLayer, TFarLayer >

Bridge node.

It is necessary to have synchronized clock with outside world before bridge construction (from SNTP server), because bridge serves time to clients.

Template Parameters
TLocalLayerType of local layer
TFarLayerType of far layer

Definition at line 82 of file bridge.hpp.

Constructor & Destructor Documentation

◆ Bridge()

template<typename TLocalLayer , typename TFarLayer >
SPSP::Nodes::Bridge< TLocalLayer, TFarLayer >::Bridge ( TLocalLayer *  ll,
TFarLayer *  fl,
BridgeConfig  conf = {} 
)
inline

Construct a new bridge object.

Parameters
llLocal layer
flFar layer
confConfiguration

Definition at line 117 of file bridge.hpp.

◆ ~Bridge()

template<typename TLocalLayer , typename TFarLayer >
SPSP::Nodes::Bridge< TLocalLayer, TFarLayer >::~Bridge ( )
inline

Destroys the bridge node.

Definition at line 131 of file bridge.hpp.

Member Function Documentation

◆ processProbeReq()

template<typename TLocalLayer , typename TFarLayer >
bool SPSP::Nodes::Bridge< TLocalLayer, TFarLayer >::processProbeReq ( const LocalMessageT &  req,
int  rssi = NODE_RSSI_UNKNOWN 
)
inlineprotectedvirtual

Processes PROBE_REQ message.

Parameters
reqRequest message
rssiReceived signal strength indicator (in dBm)
Returns
true Message delivery successful
false Message delivery failed

Implements SPSP::ILocalNode< TLocalLayer >.

Definition at line 301 of file bridge.hpp.

◆ processProbeRes()

template<typename TLocalLayer , typename TFarLayer >
bool SPSP::Nodes::Bridge< TLocalLayer, TFarLayer >::processProbeRes ( const LocalMessageT &  req,
int  rssi = NODE_RSSI_UNKNOWN 
)
inlineprotectedvirtual

Processes PROBE_RES message.

Doesn't do anything.

Parameters
reqRequest message
rssiReceived signal strength indicator (in dBm)
Returns
true Message delivery successful
false Message delivery failed

Implements SPSP::ILocalNode< TLocalLayer >.

Definition at line 336 of file bridge.hpp.

◆ processPub()

template<typename TLocalLayer , typename TFarLayer >
bool SPSP::Nodes::Bridge< TLocalLayer, TFarLayer >::processPub ( const LocalMessageT &  req,
int  rssi = NODE_RSSI_UNKNOWN 
)
inlineprotectedvirtual

Processes PUB message.

Parameters
reqRequest message
rssiReceived signal strength indicator (in dBm)
Returns
true Message delivery successful
false Message delivery failed

Implements SPSP::ILocalNode< TLocalLayer >.

Definition at line 347 of file bridge.hpp.

◆ processSubData()

template<typename TLocalLayer , typename TFarLayer >
bool SPSP::Nodes::Bridge< TLocalLayer, TFarLayer >::processSubData ( const LocalMessageT &  req,
int  rssi = NODE_RSSI_UNKNOWN 
)
inlineprotectedvirtual

Processes SUB_DATA message.

Doesn't do anything.

Parameters
reqRequest message
rssiReceived signal strength indicator (in dBm)
Returns
true Message delivery successful
false Message delivery failed

Implements SPSP::ILocalNode< TLocalLayer >.

Definition at line 416 of file bridge.hpp.

◆ processSubReq()

template<typename TLocalLayer , typename TFarLayer >
bool SPSP::Nodes::Bridge< TLocalLayer, TFarLayer >::processSubReq ( const LocalMessageT &  req,
int  rssi = NODE_RSSI_UNKNOWN 
)
inlineprotectedvirtual

Processes SUB_REQ message.

Parameters
reqRequest message
rssiReceived signal strength indicator (in dBm)
Returns
true Message delivery successful
false Message delivery failed

Implements SPSP::ILocalNode< TLocalLayer >.

Definition at line 372 of file bridge.hpp.

◆ processTimeReq()

template<typename TLocalLayer , typename TFarLayer >
bool SPSP::Nodes::Bridge< TLocalLayer, TFarLayer >::processTimeReq ( const LocalMessageT &  req,
int  rssi = NODE_RSSI_UNKNOWN 
)
inlineprotectedvirtual

Processes TIME_REQ message.

Responds with TIME_RES message.

Parameters
reqRequest message
rssiReceived signal strength indicator (in dBm)
Returns
true Message delivery successful
false Message delivery failed

Implements SPSP::ILocalNode< TLocalLayer >.

Definition at line 461 of file bridge.hpp.

◆ processTimeRes()

template<typename TLocalLayer , typename TFarLayer >
bool SPSP::Nodes::Bridge< TLocalLayer, TFarLayer >::processTimeRes ( const LocalMessageT &  req,
int  rssi = NODE_RSSI_UNKNOWN 
)
inlineprotectedvirtual

Processes TIME_RES message.

Doesn't do anything.

Parameters
reqRequest message
rssiReceived signal strength indicator (in dBm)
Returns
true Message delivery successful
false Message delivery failed

Implements SPSP::ILocalNode< TLocalLayer >.

Definition at line 486 of file bridge.hpp.

◆ processUnsub()

template<typename TLocalLayer , typename TFarLayer >
bool SPSP::Nodes::Bridge< TLocalLayer, TFarLayer >::processUnsub ( const LocalMessageT &  req,
int  rssi = NODE_RSSI_UNKNOWN 
)
inlineprotectedvirtual

Processes UNSUB message.

Parameters
reqRequest message
rssiReceived signal strength indicator (in dBm)
Returns
true Message delivery successful
false Message delivery failed

Implements SPSP::ILocalNode< TLocalLayer >.

Definition at line 427 of file bridge.hpp.

◆ publish()

template<typename TLocalLayer , typename TFarLayer >
bool SPSP::Nodes::Bridge< TLocalLayer, TFarLayer >::publish ( const std::string &  topic,
const std::string &  payload 
)
inline

Publishes payload to topic.

This is primary endpoint for publishing locally data on this node. Directly sends data to far layer.

Parameters
topicTopic
payloadPayload
Returns
true Delivery successful
false Delivery failed

Definition at line 187 of file bridge.hpp.

◆ publishSubData()

template<typename TLocalLayer , typename TFarLayer >
bool SPSP::Nodes::Bridge< TLocalLayer, TFarLayer >::publishSubData ( const LocalAddrT &  addr,
const std::string &  topic,
const std::string &  payload 
)
inlineprotected

Publishes received subscription data to local layer node.

Parameters
addrNode address
topicTopic
payloadPayload
Returns
true Message delivery successful
false Message delivery failed

Definition at line 498 of file bridge.hpp.

◆ receiveFar()

template<typename TLocalLayer , typename TFarLayer >
bool SPSP::Nodes::Bridge< TLocalLayer, TFarLayer >::receiveFar ( const std::string &  topic,
const std::string &  payload 
)
inlinevirtual

Receives the message from far layer.

Acts as a callback for far layer receiver.

Parameters
topicTopic
payloadPayload (data)
Returns
true Message delivery successful
false Message delivery failed

Implements SPSP::IFarNode< TFarLayer >.

Definition at line 146 of file bridge.hpp.

◆ resubscribeAll()

template<typename TLocalLayer , typename TFarLayer >
void SPSP::Nodes::Bridge< TLocalLayer, TFarLayer >::resubscribeAll ( )
inline

Resubscribes to all topics.

Definition at line 244 of file bridge.hpp.

◆ subDBDecrementLifetimes()

template<typename TLocalLayer , typename TFarLayer >
void SPSP::Nodes::Bridge< TLocalLayer, TFarLayer >::subDBDecrementLifetimes ( )
inlineprotected

Decrements lifetimes of entries.

Definition at line 534 of file bridge.hpp.

◆ subDBRemoveExpiredEntries()

template<typename TLocalLayer , typename TFarLayer >
void SPSP::Nodes::Bridge< TLocalLayer, TFarLayer >::subDBRemoveExpiredEntries ( )
inlineprotected

Removes expired entries.

Definition at line 553 of file bridge.hpp.

◆ subDBRemoveUnusedTopics()

template<typename TLocalLayer , typename TFarLayer >
void SPSP::Nodes::Bridge< TLocalLayer, TFarLayer >::subDBRemoveUnusedTopics ( )
inlineprotected

Removes and unsubscribes from unused topics.

Definition at line 582 of file bridge.hpp.

◆ subDBTick()

template<typename TLocalLayer , typename TFarLayer >
void SPSP::Nodes::Bridge< TLocalLayer, TFarLayer >::subDBTick ( )
inlineprotected

Subscribe DB timer tick callback.

Decrements subscribe database lifetimes. Unsubscribes from unused topics.

Definition at line 519 of file bridge.hpp.

◆ subscribe()

template<typename TLocalLayer , typename TFarLayer >
bool SPSP::Nodes::Bridge< TLocalLayer, TFarLayer >::subscribe ( const std::string &  topic,
SubscribeCb  cb 
)
inline

Subscribes to topic.

This is primary endpoint for subscribing locally on this node. Directly forwards incoming data from far layer to given callback.

Parameters
topicTopic
cbCallback function
Returns
true Subscribe successful
false Subscribe failed

Definition at line 212 of file bridge.hpp.

◆ unsubscribe()

template<typename TLocalLayer , typename TFarLayer >
bool SPSP::Nodes::Bridge< TLocalLayer, TFarLayer >::unsubscribe ( const std::string &  topic)
inline

Unsubscribes from topic.

This is primary endpoint for unsubscribing locally on this node.

Parameters
topicTopic
Returns
true Unsubscribe successful
false Unsubscribe failed

Definition at line 267 of file bridge.hpp.


The documentation for this class was generated from the following file: