![]() |
User Manual, Developers Guide and API Documentation |
![]() |
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
1.5.5