8000 Merge pull request #93 from cloudwebrtc/issue-87 · linuxerwang/flutter-webrtc@a151197 · GitHub
[go: up one dir, main page]

Skip to content

Commit a151197

Browse files
authored
Merge pull request flutter-webrtc#93 from cloudwebrtc/issue-87
Patches for flutter-webrtc#87
2 parents 649c2e2 + a666b3f commit a151197

File tree

6 files changed

+85
-4
lines changed

6 files changed

+85
-4
lines changed

android/src/main/java/com/cloudwebrtc/webrtc/DataChannelObserver.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import org.webrtc.DataChannel;
77
import io.flutter.plugin.common.EventChannel;
8+
import com.cloudwebrtc.webrtc.utils.AnyThreadSink;
89
import com.cloudwebrtc.webrtc.utils.ConstraintsMap;
910

1011
class DataChannelObserver implements DataChannel.Observer, EventChannel.StreamHandler {
@@ -43,7 +44,7 @@ private String dataChannelStateString(DataChannel.State dataChannelState) {
4344

4445
@Override
4546
public void onListen(Object o, EventChannel.EventSink sink) {
46-
eventSink = sink;
47+
eventSink = new AnyThreadSink(sink);
4748
}
4849

4950
@Override

android/src/main/java/com/cloudwebrtc/webrtc/FlutterRTCVideoRenderer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.util.Log;
44
import android.graphics.SurfaceTexture;
55

6+
import com.cloudwebrtc.webrtc.utils.AnyThreadSink;
67
import com.cloudwebrtc.webrtc.utils.ConstraintsMap;
78
import com.cloudwebrtc.webrtc.utils.EglUtils;
89

@@ -111,7 +112,7 @@ public void setId(int id){
111112

112113
@Override
113114
public void onListen(Object o, EventChannel.EventSink sink) {
114-
eventSink = sink;
115+
eventSink = new AnyThreadSink(sink);
115116
}
116117

117118
@Override

android/src/main/java/com/cloudwebrtc/webrtc/FlutterWebRTCPlugin.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import com.cloudwebrtc.webrtc.record.AudioChannel;
1111
import com.cloudwebrtc.webrtc.record.FrameCapturer;
12+
import com.cloudwebrtc.webrtc.utils.AnyThreadResult;
1213
import com.cloudwebrtc.webrtc.utils.ConstraintsArray;
1314
import com.cloudwebrtc.webrtc.utils.ConstraintsMap;
1415
import com.cloudwebrtc.webrtc.utils.EglUtils;
@@ -124,7 +125,8 @@ private FlutterWebRTCPlugin(Registrar registrar, MethodChannel channel) {
124125
}
125126

126127
@Override
127-
public void onMethodCall(MethodCall call, Result result) {
128+
public void onMethodCall(MethodCall call, Result notSafeResult) {
129+
final AnyThreadResult result = new AnyThreadResult(notSafeResult);
128130
if (call.method.equals("createPeerConnection")) {
129131
Map<String, Object> constraints = call.argument("constraints");
130132
Map<String, Object> configuration = call.argument("configuration");

android/src/main/java/com/cloudwebrtc/webrtc/PeerConnectionObserver.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import android.util.SparseArray;
1212
import androidx.annotation.Nullable;
1313

14+
import com.cloudwebrtc.webrtc.utils.AnyThreadSink;
1415
import com.cloudwebrtc.webrtc.utils.ConstraintsArray;
1516
import com.cloudwebrtc.webrtc.utils.ConstraintsMap;
1617

@@ -59,7 +60,7 @@ class PeerConnectionObserver implements PeerConnection.Observer, EventChannel.St
5960

6061
@Override
6162
public void onListen(Object o, EventChannel.EventSink sink) {
62-
eventSink = sink;
63+
eventSink = new AnyThreadSink(sink);
6364
}
6465

6566
@Override
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.cloudwebrtc.webrtc.utils;
2+
3+
import android.os.Looper;
4+
import android.os.Handler;
5+
6+
import io.flutter.plugin.common.MethodChannel;
7+
8+
public final class AnyThreadResult implements MethodChannel.Result {
9+
final private MethodChannel.Result result;
10+
final private Handler handler = new Handler(Looper.getMainLooper());
11+
12+
public AnyThreadResult(MethodChannel.Result result) {
13+
this.result = result;
14+
}
15+
16+
@Override
17+
public void success(Object o) {
18+
post(()->result.success(o));
19+
}
20+
21+
@Override
22+
public void error(String s, String s1, Object o) {
23+
post(()->result.error(s, s1, o));
24+
}
25+
26+
@Override
27+
public void notImplemented() {
28+
post(result::notImplemented);
29+
}
30+
31+
private void post(Runnable r) {
32+
if(Looper.getMainLooper() == Looper.myLooper()){
33+
r.run();
34+
}else{
35+
handler.post(r);
36+
}
37+
}
38+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.cloudwebrtc.webrtc.utils;
2+
3+
import android.os.Handler;
4+
import android.os.Looper;
5+
6+
import io.flutter.plugin.common.EventChannel;
7+
8+
public final class AnyThreadSink implements EventChannel.EventSink {
9+
final private EventChannel.EventSink eventSink;
10+
final private Handler handler = new Handler(Looper.getMainLooper());
11+
12+
public AnyThreadSink(EventChannel.EventSink eventSink) {
13+
this.eventSink = eventSink;
14+
}
15+
16+
@Override
17+
public void success(Object o) {
18+
post(()->eventSink.success(o));
19+
}
20+
21+
@Override
22+
public void error(String s, String s1, Object o) {
23+
post(()->eventSink.error(s, s1, o));
24+
}
25+
26+
@Override
27+
public void endOfStream() {
28+
post(eventSink::endOfStream);
29+
}
30+
31+
private void post(Runnable r) {
32+
if(Looper.getMainLooper() == Looper.myLooper()){
33+
r.run();
34+
}else{
35+
handler.post(r);
36+
}
37+
}
38+
}

0 commit comments

Comments
 (0)
0