Menu

famouso::mw::nl::awds::NodeRepository Class Reference

A node repository for holding AWDS nodes and register nodes to subjects. More...

#include <NodeRepository.h>

Data Structures

class  attr_finder
 A function object for finding attributes and set the strictest to the result.
class  Subscriber
 A class for mapping attributes to a node.

Public Types

typedef NodeRepository type
typedef
boost::shared_container_iterator
< std::list< Node::type > > 
NodeIterator
typedef famouso::mw::Subject SNN
 A famouso Subject.

Public Member Functions

Node::type find (MAC &mac)
 Find a node by a given MAC address. If the node doesn't exists, it will be created.
std::pair< NodeIterator,
NodeIterator
find (SNN subject)
 Find all nodes registered to the given Subject wich match the required attributes. The attributes can be defined by publisher or subscriber.
FlowId flowid (Node::type &node, SNN subject)
 Find the flow id for a node subscribed to a subject.
int elapsed (Node::type &node, SNN subject)
 Find the elapsed seconds since a node subscribed to a subject.
template<class AttrSet >
void find (Node::type &node, SNN subject, AttrSet &cas)
 Search the subscriber and publisher attributes defined by the given attribute set and set the strictest to the given set.
void remove (Node::type &node)
 Remove a node from the repository. It will be removed from all subjects too.
void remove (SNN &subject)
 Remove a subject from the repository. Clients registered to the given subject will be unregistered from it.
void reg (Node::type &node, SNN &subject, Attributes::type &attribs)
 Register a node to a subject.
void reg (SNN subject, Attributes::type &attribs)
 Register a subject to the repository.
void unreg (Node::type &node)
 Unregister the given node from all known subjects.
void unreg (Node::type &node, SNN subject)
 Unregister the given node from a subject.
void update (Node::type &node, SNN subject, FlowId fId)
 Updates the flow id of a node registered to a subject.

Static Public Member Functions

static typegetInstance ()
 Get the only instance of the node repository.

Detailed Description

A node repository for holding AWDS nodes and register nodes to subjects.

Todo:
We can't handle multiple publisher with same subject and different attributes. We use the attributes of latest announce for now.

Member Typedef Documentation

typedef boost::shared_container_iterator<std::list<Node::type> > famouso::mw::nl::awds::NodeRepository::NodeIterator

A node repository for holding AWDS nodes and register nodes to subjects.

Todo:
We can't handle multiple publisher with same subject and different attributes. We use the attributes of latest announce for now.


Member Function Documentation

int famouso::mw::nl::awds::NodeRepository::elapsed ( Node::type node,
SNN  subject 
)

Find the elapsed seconds since a node subscribed to a subject.

Parameters:
node The node to find the flow id of.
subject The subject to find the flow id of.
Returns:
The found seconds or INT_MAX if not found.

Referenced by famouso::mw::nl::AWDSNL::deliver().

template<class AttrSet >
void famouso::mw::nl::awds::NodeRepository::find ( Node::type node,
SNN  subject,
AttrSet &  cas 
) [inline]

Search the subscriber and publisher attributes defined by the given attribute set and set the strictest to the given set.

Parameters:
node The node to find the attributes of.
subject The subject to find the attributes of.
cas The attributes set to save the found attributes.
Template Parameters:
AttrSet The atttributes set type.
std::pair< NodeRepository::NodeIterator, NodeRepository::NodeIterator > famouso::mw::nl::awds::NodeRepository::find ( SNN  subject  ) 

Find all nodes registered to the given Subject wich match the required attributes. The attributes can be defined by publisher or subscriber.

Parameters:
subject The subject to find nodes for.
Returns:
A list of nodes registered for the given subject. The list can be empty, if no node is registered or no node match the required attributes.

References famouso::mw::nl::awds::ComparableAttributeSet< AttrSet >::match().

Node::type famouso::mw::nl::awds::NodeRepository::find ( MAC mac  ) 

Find a node by a given MAC address. If the node doesn't exists, it will be created.

Parameters:
mac The MAC address to find the node for.
Returns:
The node corresponding to the MAC address.

References famouso::mw::nl::awds::detail::Node< AttrSet >::create().

Referenced by famouso::mw::nl::AWDSNL::deliver().

FlowId famouso::mw::nl::awds::NodeRepository::flowid ( Node::type node,
SNN  subject 
)

Find the flow id for a node subscribed to a subject.

Parameters:
node The node to find the flow id of.
subject The subject to find the flow id of.
Returns:
The found flow id or -1.

Referenced by famouso::mw::nl::AWDSNL::deliver().

NodeRepository & famouso::mw::nl::awds::NodeRepository::getInstance (  )  [static]

Get the only instance of the node repository.

Returns:
A reference to the only instance of the repository.
void famouso::mw::nl::awds::NodeRepository::reg ( SNN  subject,
Attributes::type attribs 
)

Register a subject to the repository.

Parameters:
subject The subject to register.
attribs The attributes which the publisher requires.
void famouso::mw::nl::awds::NodeRepository::reg ( Node::type node,
SNN subject,
Attributes::type attribs 
)

Register a node to a subject.

Parameters:
node The node to register.
subject The subject to register.
attribs The attributes which the subscriber requires.
Todo:
If the subject is not registered, this function should do nothing.

Referenced by famouso::mw::nl::AWDSNL::deliver().

void famouso::mw::nl::awds::NodeRepository::remove ( SNN subject  ) 

Remove a subject from the repository. Clients registered to the given subject will be unregistered from it.

Parameters:
subject The subject to remove.
void famouso::mw::nl::awds::NodeRepository::remove ( Node::type node  ) 

Remove a node from the repository. It will be removed from all subjects too.

Parameters:
node The node to remove.

References unreg().

void famouso::mw::nl::awds::NodeRepository::unreg ( Node::type node,
SNN  subject 
)

Unregister the given node from a subject.

Parameters:
node The node to unregister.
subject The subject to unregister from.
void famouso::mw::nl::awds::NodeRepository::unreg ( Node::type node  ) 

Unregister the given node from all known subjects.

Parameters:
node The node to unregister.

Referenced by famouso::mw::nl::AWDSNL::deliver(), and remove().

void famouso::mw::nl::awds::NodeRepository::update ( Node::type node,
SNN  subject,
FlowId  fId 
)

Updates the flow id of a node registered to a subject.

Parameters:
node The node to update.
subject The subject to update.
fId The new flow id.

Referenced by famouso::mw::nl::AWDSNL::deliver().


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