fipa_acl  1.4
Public Member Functions | Protected Attributes | List of all members
fipa::acl::ConversationObservable Class Reference

#include <conversation.h>

Inherited by fipa::acl::Conversation.

Public Member Functions

 ConversationObservable ()
 
 ConversationObservable (const ConversationObservable &other)
 
 ConversationObservable (const fipa::acl::ConversationID &conversationId)
 
virtual ~ConversationObservable ()
 
void setConversationId (const fipa::acl::ConversationID &conversationId)
 
fipa::acl::ConversationID getConversationId () const
 
void addObserver (const ConversationObserverPtr &observer)
 
void removeObserver (const ConversationObserverPtr &observer)
 
void notify (const fipa::acl::ACLMessage &msg, conversation::EventType eventType)
 
conversation::Status getStatus () const
 
ConversationObserverList getObservers () const
 
void detachObservers ()
 
bool hasObservers () const
 

Protected Attributes

fipa::acl::ConversationID mConversationId
 

Detailed Description

Base class for a conversation which can be observed by a ConversationObserver

Definition at line 159 of file conversation.h.

Constructor & Destructor Documentation

◆ ConversationObservable() [1/3]

fipa::acl::ConversationObservable::ConversationObservable ( )

Default constructor

Definition at line 327 of file conversation.cpp.

◆ ConversationObservable() [2/3]

fipa::acl::ConversationObservable::ConversationObservable ( const ConversationObservable other)

Definition at line 331 of file conversation.cpp.

332  : mConversationId(other.mConversationId)
333  , mStatus(other.mStatus)
334  , mObservers(other.mObservers)
335 {}
fipa::acl::ConversationID mConversationId
Definition: conversation.h:231

◆ ConversationObservable() [3/3]

fipa::acl::ConversationObservable::ConversationObservable ( const fipa::acl::ConversationID conversationId)

Construct conversation observable with a given id

Definition at line 337 of file conversation.cpp.

338  : mConversationId(conversationId)
339  , mStatus(conversation::UNINITIALIZED)
340 {}
fipa::acl::ConversationID mConversationId
Definition: conversation.h:231

◆ ~ConversationObservable()

virtual fipa::acl::ConversationObservable::~ConversationObservable ( )
inlinevirtual

Desconstructor marked virtual to create polymorphic class

Definition at line 177 of file conversation.h.

177 {}

Member Function Documentation

◆ addObserver()

void fipa::acl::ConversationObservable::addObserver ( const ConversationObserverPtr observer)

Add a conversation observer

Definition at line 353 of file conversation.cpp.

354 {
355  boost::unique_lock<boost::mutex> lock(mObserverMutex);
356  ConversationObserverList::const_iterator it = std::find(mObservers.begin(), mObservers.end(), observer);
357  if(it == mObservers.end())
358  {
359  mObservers.push_back(observer);
360  observer->registerObservable(ConversationObservablePtr(this, NullDeleter()));
361  }
362 }
boost::shared_ptr< ConversationObservable > ConversationObservablePtr
Definition: conversation.h:21

◆ detachObservers()

void fipa::acl::ConversationObservable::detachObservers ( )

Remove all attached observers, e.g. to break cyclic dependencies when working with shared pointers

Definition at line 410 of file conversation.cpp.

411 {
412  mObservers.clear();
413 }

◆ getConversationId()

fipa::acl::ConversationID fipa::acl::ConversationObservable::getConversationId ( ) const

Get the conversation id

Returns
Conversation id

Definition at line 342 of file conversation.cpp.

343 {
344  return mConversationId;
345 }
fipa::acl::ConversationID mConversationId
Definition: conversation.h:231

◆ getObservers()

ConversationObserverList fipa::acl::ConversationObservable::getObservers ( ) const

Retrieve the observers of this conversation

Definition at line 415 of file conversation.cpp.

416 {
417  boost::unique_lock<boost::mutex> lock(mObserverMutex);
418  return mObservers;
419 }

◆ getStatus()

conversation::Status fipa::acl::ConversationObservable::getStatus ( ) const

Get the current status of the conversation

Definition at line 405 of file conversation.cpp.

406 {
407  return mStatus;
408 }

◆ hasObservers()

bool fipa::acl::ConversationObservable::hasObservers ( ) const

Test whether there are observers

Returns
true if there are observers attached to this observable, false otherwise

Definition at line 347 of file conversation.cpp.

348 {
349  boost::unique_lock<boost::mutex> lock(mObserverMutex);
350  return !mObservers.empty();
351 }

◆ notify()

void fipa::acl::ConversationObservable::notify ( const fipa::acl::ACLMessage msg,
conversation::EventType  eventType 
)

Notify all attached observers

Definition at line 374 of file conversation.cpp.

375 {
376  boost::unique_lock<boost::mutex> lock(mObserverMutex);
377  LOG_INFO("notify: message event: '%s', message content: '%s'", conversation::EventTypeTxt[eventType].c_str(), msg.getContent().c_str());
378  ConversationObserverList::iterator it = mObservers.begin();
379  for(; it != mObservers.end(); ++it)
380  {
381  (*it)->update( conversation::Event(msg, eventType) );
382  }
383 
384  switch(eventType)
385  {
387  assert(mStatus == conversation::UNINITIALIZED);
388  mStatus = conversation::RUNNING;
389  break;
391  mStatus = conversation::ENDED;
392  break;
394  mStatus = conversation::RUNNING;
395  break;
397  mStatus = conversation::FAILED;
398  break;
399  default:
400  break;
401  }
402 
403 }
std::string getContent() const
Definition: acl_message.h:294

◆ removeObserver()

void fipa::acl::ConversationObservable::removeObserver ( const ConversationObserverPtr observer)

Remove a conversation observer

Definition at line 364 of file conversation.cpp.

365 {
366  boost::unique_lock<boost::mutex> lock(mObserverMutex);
367  ConversationObserverList::iterator it = std::find(mObservers.begin(), mObservers.end(), observer);
368  if(it != mObservers.end())
369  {
370  mObservers.erase(it);
371  }
372 }

◆ setConversationId()

void fipa::acl::ConversationObservable::setConversationId ( const fipa::acl::ConversationID conversationId)
inline

Set conversation id

Definition at line 182 of file conversation.h.

182 { mConversationId = conversationId; }
fipa::acl::ConversationID mConversationId
Definition: conversation.h:231

Member Data Documentation

◆ mConversationId

fipa::acl::ConversationID fipa::acl::ConversationObservable::mConversationId
protected

(Conversation) identifier of the conversation observable

Definition at line 231 of file conversation.h.


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