Many of these interfaces are not intuitive, or are the way they are for complex historical reasons, so it would be nice to document these things for future developers. Also, many nonstandard things (such as RTCConfiguration options) were not documented at all before this CL. BUG=webrtc:7131 TBR=pthatcher@webrtc.org NOTRY=True Review-Url: https://codereview.webrtc.org/2680273002 Cr-Commit-Position: refs/heads/master@{#16485}
62 lines
1.7 KiB
C++
62 lines
1.7 KiB
C++
/*
|
|
* Copyright 2011 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#ifndef WEBRTC_API_NOTIFIER_H_
|
|
#define WEBRTC_API_NOTIFIER_H_
|
|
|
|
#include <list>
|
|
|
|
#include "webrtc/api/mediastreaminterface.h"
|
|
#include "webrtc/base/checks.h"
|
|
|
|
namespace webrtc {
|
|
|
|
// Implements a template version of a notifier.
|
|
// TODO(deadbeef): This is an implementation detail; move out of api/.
|
|
template <class T>
|
|
class Notifier : public T {
|
|
public:
|
|
Notifier() {
|
|
}
|
|
|
|
virtual void RegisterObserver(ObserverInterface* observer) {
|
|
RTC_DCHECK(observer != NULL);
|
|
observers_.push_back(observer);
|
|
}
|
|
|
|
virtual void UnregisterObserver(ObserverInterface* observer) {
|
|
for (std::list<ObserverInterface*>::iterator it = observers_.begin();
|
|
it != observers_.end(); it++) {
|
|
if (*it == observer) {
|
|
observers_.erase(it);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void FireOnChanged() {
|
|
// Copy the list of observers to avoid a crash if the observer object
|
|
// unregisters as a result of the OnChanged() call. If the same list is used
|
|
// UnregisterObserver will affect the list make the iterator invalid.
|
|
std::list<ObserverInterface*> observers = observers_;
|
|
for (std::list<ObserverInterface*>::iterator it = observers.begin();
|
|
it != observers.end(); ++it) {
|
|
(*it)->OnChanged();
|
|
}
|
|
}
|
|
|
|
protected:
|
|
std::list<ObserverInterface*> observers_;
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // WEBRTC_API_NOTIFIER_H_
|