|
@@ -976,30 +976,47 @@ void PeerConnection::triggerDataChannel(weak_ptr<DataChannel> weakDataChannel) {
|
|
|
if (dataChannel)
|
|
|
mPendingDataChannels.push(std::move(dataChannel));
|
|
|
|
|
|
+ triggerPendingDataChannels();
|
|
|
+}
|
|
|
+
|
|
|
+void PeerConnection::triggerTrack(weak_ptr<Track> weakTrack) {
|
|
|
+ auto track = weakTrack.lock();
|
|
|
+ if (track)
|
|
|
+ mPendingTracks.push(std::move(track));
|
|
|
+
|
|
|
+ triggerPendingTracks();
|
|
|
+}
|
|
|
+
|
|
|
+void PeerConnection::triggerPendingDataChannels() {
|
|
|
while (dataChannelCallback) {
|
|
|
auto next = mPendingDataChannels.tryPop();
|
|
|
if (!next)
|
|
|
break;
|
|
|
|
|
|
- mProcessor->enqueue(dataChannelCallback.wrap(),
|
|
|
- std::make_shared<rtc::DataChannel>(std::move(*next)));
|
|
|
+ auto impl = std::move(*next);
|
|
|
+ dataChannelCallback(std::make_shared<rtc::DataChannel>(impl));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void PeerConnection::triggerTrack(weak_ptr<Track> weakTrack) {
|
|
|
- auto track = weakTrack.lock();
|
|
|
- if (track)
|
|
|
- mPendingTracks.push(std::move(track));
|
|
|
-
|
|
|
+void PeerConnection::triggerPendingTracks() {
|
|
|
while (trackCallback) {
|
|
|
auto next = mPendingTracks.tryPop();
|
|
|
if (!next)
|
|
|
break;
|
|
|
|
|
|
- mProcessor->enqueue(trackCallback.wrap(), std::make_shared<rtc::Track>(std::move(*next)));
|
|
|
+ auto impl = std::move(*next);
|
|
|
+ trackCallback(std::make_shared<rtc::Track>(std::move(impl)));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void PeerConnection::flushPendingDataChannels() {
|
|
|
+ mProcessor->enqueue(std::bind(&PeerConnection::triggerPendingDataChannels, this));
|
|
|
+}
|
|
|
+
|
|
|
+void PeerConnection::flushPendingTracks() {
|
|
|
+ mProcessor->enqueue(std::bind(&PeerConnection::triggerPendingTracks, this));
|
|
|
+}
|
|
|
+
|
|
|
bool PeerConnection::changeState(State newState) {
|
|
|
State current;
|
|
|
do {
|