User Manual, Developers Guide and API Documentation

NewFrameProviderObserver.cpp

Go to the documentation of this file.
00001 /*******************************************************************************
00002  * This file is part of openWNS (open Wireless Network Simulator)
00003  * _____________________________________________________________________________
00004  *
00005  * Copyright (C) 2004-2007
00006  * Chair of Communication Networks (ComNets)
00007  * Kopernikusstr. 5, D-52074 Aachen, Germany
00008  * phone: ++49-241-80-27910,
00009  * fax: ++49-241-80-22242
00010  * email: info@openwns.org
00011  * www: http://www.openwns.org
00012  * _____________________________________________________________________________
00013  *
00014  * openWNS is free software; you can redistribute it and/or modify it under the
00015  * terms of the GNU Lesser General Public License version 2 as published by the
00016  * Free Software Foundation;
00017  *
00018  * openWNS is distributed in the hope that it will be useful, but WITHOUT ANY
00019  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
00020  * A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
00021  * details.
00022  *
00023  * You should have received a copy of the GNU Lesser General Public License
00024  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
00025  *
00026  ******************************************************************************/
00027 
00028 #include "NewFrameProviderObserver.hpp"
00029 
00030 #include <WNS/Assure.hpp>
00031 
00032 
00033 using namespace  wns::ldk::fcf;
00034 
00035 
00036 /************ NewFrameProvider **********************/
00037 
00038 NewFrameProvider::NewFrameProvider(std::string stationName) :
00039     observersToNotify_(),
00040     newFrameObservers_(),
00041     stationName_(stationName),
00042     logger_("WNS", "NewFrameProvider")
00043 {
00044 } //NewFrameProvider
00045 
00046 
00047 
00048 NewFrameProvider::~NewFrameProvider()
00049 {
00050     for(NewFrameObservers::iterator iter = newFrameObservers_.begin();
00051         iter != newFrameObservers_.end(); ++iter)
00052     {
00053         (*iter)->setNewFrameProvider(NULL);
00054     }
00055 }
00056 
00057 
00058 
00059 void
00060 NewFrameProvider::attachObserver(NewFrameObserver* newFrameObserver)
00061 {
00062     assure(std::find(newFrameObservers_.begin(),
00063              newFrameObservers_.end(),
00064              newFrameObserver)
00065            == newFrameObservers_.end(),
00066            "NewFrameObserver is already added to NewFrameProvider");
00067 
00068     MESSAGE_BEGIN(NORMAL, logger_, m, stationName_ );
00069     m << ": Attach observer! "
00070       << newFrameObserver->getObserverName();
00071     MESSAGE_END();
00072 
00073     newFrameObservers_.push_back(newFrameObserver);
00074     newFrameObserver->setNewFrameProvider(this);
00075 } //attachNewFrameObserver
00076 
00077 
00078 
00079 void
00080 NewFrameProvider::detachObserver(NewFrameObserver* newFrameObserver)
00081 {
00082     assure(std::find(newFrameObservers_.begin(),
00083              newFrameObservers_.end(),
00084              newFrameObserver)
00085            != newFrameObservers_.end(),
00086            "unknown NewFrameObserver");
00087 
00088     MESSAGE_BEGIN(NORMAL, logger_, m, stationName_ );
00089     m << ": Detach observer! "
00090       << newFrameObserver->getObserverName();
00091     MESSAGE_END();
00092 
00093     newFrameObserver->setNewFrameProvider(NULL);
00094     newFrameObserver->newFrameProviderDeleted();
00095     newFrameObservers_.remove(newFrameObserver);
00096 
00097     // remove observer from list observersToNotify_, because it is detached
00098     if( std::find(observersToNotify_.begin(), observersToNotify_.end(),
00099                   newFrameObserver) != newFrameObservers_.end() )
00100         observersToNotify_.remove(newFrameObserver);
00101 
00102 } //detachNewFrameObserver
00103 
00104 
00105 
00106 void
00107 NewFrameProvider::notifyNewFrameObservers()
00108 {
00109     // Copy of list is necessary, because elements of List could deleted while
00110     // iterating throw the list
00111     observersToNotify_ = newFrameObservers_;
00112 
00113     // Send NewFrame message to observer
00114     MESSAGE_BEGIN(NORMAL, logger_, m, stationName_ );
00115     m << ": Notify all observers! newFrameObservers_.size():" << observersToNotify_.size();
00116     MESSAGE_END();
00117 
00118     while(!observersToNotify_.empty())
00119     {
00120         NewFrameObserver* observer = observersToNotify_.front();
00121         observersToNotify_.pop_front();
00122         observer->messageNewFrame();
00123     }
00124 } //notifyNewFrameObservers
00125 
00126 
00127 
00128 /************ NewFrameObserver **********************/
00129 
00130 NewFrameObserver::NewFrameObserver(std::string observerName):
00131     observerName_(observerName),
00132     newFrameProvider_(NULL)
00133 {} // NewFrameObserver
00134 
00135 
00136 
00137 NewFrameObserver::~NewFrameObserver()
00138 {
00139     if (newFrameProvider_)
00140     {
00141         newFrameProvider_->detachObserver(this);
00142         newFrameProvider_ = NULL;
00143     }
00144 
00145 } // ~NewFrameObserver
00146 
00147 
00148 
00149 void
00150 NewFrameObserver::setNewFrameProvider(NewFrameProvider* newFrameProvider)
00151 {
00152     newFrameProvider_ = newFrameProvider;
00153 } // setNewFrameProvider
00154 
00155 
00156 
00157 void
00158 NewFrameObserver::newFrameProviderDeleted()
00159 {
00160 } //newFrameProviderDeleted
00161 
00162 

Generated on Fri May 25 03:31:42 2012 for openWNS by  doxygen 1.5.5