Skip to content

Commit f63e1cd

Browse files
committed
Refactoring call signaling.
1 parent 787e136 commit f63e1cd

File tree

4 files changed

+198
-149
lines changed

4 files changed

+198
-149
lines changed

lib/main.dart

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@ class _MyAppState extends State<MyApp> {
2323
List<RouteItem> items;
2424
String _server = '';
2525
SharedPreferences _prefs;
26-
2726
bool _datachannel = false;
27+
28+
String get server => _server ?? 'demo.cloudwebrtc.com';
2829
@override
2930
initState() {
3031
super.initState();
@@ -63,7 +64,7 @@ class _MyAppState extends State<MyApp> {
6364
_initData() async {
6465
_prefs = await SharedPreferences.getInstance();
6566
setState(() {
66-
_server = _prefs.getString('server') ?? 'demo.cloudwebrtc.com';
67+
_server = _prefs.getString('server');
6768
});
6869
}
6970

@@ -80,8 +81,8 @@ class _MyAppState extends State<MyApp> {
8081
context,
8182
MaterialPageRoute(
8283
builder: (BuildContext context) => _datachannel
83-
? DataChannelSample(ip: _server)
84-
: CallSample(ip: _server)));
84+
? DataChannelSample(host: _server)
85+
: CallSample(host: _server)));
8586
}
8687
}
8788
});

lib/src/call_sample/call_sample.dart

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ import 'package:flutter_webrtc/flutter_webrtc.dart';
66
class CallSample extends StatefulWidget {
77
static String tag = 'call_sample';
88

9-
final String ip;
9+
final String host;
1010

11-
CallSample({Key key, @required this.ip}) : super(key: key);
11+
CallSample({Key key, @required this.host}) : super(key: key);
1212

1313
@override
14-
_CallSampleState createState() => _CallSampleState(serverIP: ip);
14+
_CallSampleState createState() => _CallSampleState();
1515
}
1616

1717
class _CallSampleState extends State<CallSample> {
@@ -21,10 +21,10 @@ class _CallSampleState extends State<CallSample> {
2121
RTCVideoRenderer _localRenderer = RTCVideoRenderer();
2222
RTCVideoRenderer _remoteRenderer = RTCVideoRenderer();
2323
bool _inCalling = false;
24-
final String serverIP;
24+
Session _session;
2525

2626
// ignore: unused_element
27-
_CallSampleState({Key key, @required this.serverIP});
27+
_CallSampleState({Key key});
2828

2929
@override
3030
initState() {
@@ -48,29 +48,36 @@ class _CallSampleState extends State<CallSample> {
4848

4949
void _connect() async {
5050
if (_signaling == null) {
51-
_signaling = Signaling(serverIP)..connect();
51+
_signaling = Signaling(widget.host)..connect();
5252

53-
_signaling.onStateChange = (SignalingState state) {
53+
_signaling.onSignalingStateChange = (SignalingState state) {
5454
switch (state) {
55-
case SignalingState.CallStateNew:
55+
case SignalingState.ConnectionClosed:
56+
case SignalingState.ConnectionError:
57+
case SignalingState.ConnectionOpen:
58+
break;
59+
}
60+
};
61+
62+
_signaling.onCallStateChange = (Session session, CallState state) {
63+
switch (state) {
64+
case CallState.CallStateNew:
5665
setState(() {
66+
_session = session;
5767
_inCalling = true;
5868
});
5969
break;
60-
case SignalingState.CallStateBye:
70+
case CallState.CallStateBye:
6171
setState(() {
6272
_localRenderer.srcObject = null;
6373
_remoteRenderer.srcObject = null;
6474
_inCalling = false;
75+
_session = null;
6576
});
6677
break;
67-
case SignalingState.CallStateInvite:
68-
case SignalingState.CallStateConnected:
69-
case SignalingState.CallStateRinging:
70-
case SignalingState.ConnectionClosed:
71-
case SignalingState.ConnectionError:
72-
case SignalingState.ConnectionOpen:
73-
break;
78+
case CallState.CallStateInvite:
79+
case CallState.CallStateConnected:
80+
case CallState.CallStateRinging:
7481
}
7582
};
7683

@@ -81,15 +88,15 @@ class _CallSampleState extends State<CallSample> {
8188
});
8289
});
8390

84-
_signaling.onLocalStream = ((stream) {
91+
_signaling.onLocalStream = ((_, stream) {
8592
_localRenderer.srcObject = stream;
8693
});
8794

88-
_signaling.onAddRemoteStream = ((stream) {
95+
_signaling.onAddRemoteStream = ((_, stream) {
8996
_remoteRenderer.srcObject = stream;
9097
});
9198

92-
_signaling.onRemoveRemoteStream = ((stream) {
99+
_signaling.onRemoveRemoteStream = ((_, stream) {
93100
_remoteRenderer.srcObject = null;
94101
});
95102
}
@@ -103,7 +110,7 @@ class _CallSampleState extends State<CallSample> {
103110

104111
_hangUp() {
105112
if (_signaling != null) {
106-
_signaling.bye();
113+
_signaling.bye(_session.sid);
107114
}
108115
}
109116

lib/src/call_sample/data_channel_sample.dart

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,26 +8,25 @@ import 'package:flutter_webrtc/flutter_webrtc.dart';
88
class DataChannelSample extends StatefulWidget {
99
static String tag = 'call_sample';
1010

11-
final String ip;
11+
final String host;
1212

13-
DataChannelSample({Key key, @required this.ip}) : super(key: key);
13+
DataChannelSample({Key key, @required this.host}) : super(key: key);
1414

1515
@override
16-
_DataChannelSampleState createState() =>
17-
_DataChannelSampleState(serverIP: ip);
16+
_DataChannelSampleState createState() => _DataChannelSampleState();
1817
}
1918

2019
class _DataChannelSampleState extends State<DataChannelSample> {
2120
Signaling _signaling;
2221
List<dynamic> _peers;
2322
var _selfId;
2423
bool _inCalling = false;
25-
final String serverIP;
2624
RTCDataChannel _dataChannel;
25+
Session _session;
2726
Timer _timer;
2827
var _text = '';
2928
// ignore: unused_element
30-
_DataChannelSampleState({Key key, @required this.serverIP});
29+
_DataChannelSampleState({Key key});
3130

3231
@override
3332
initState() {
@@ -46,9 +45,9 @@ class _DataChannelSampleState extends State<DataChannelSample> {
4645

4746
void _connect() async {
4847
if (_signaling == null) {
49-
_signaling = Signaling(serverIP)..connect();
48+
_signaling = Signaling(widget.host)..connect();
5049

51-
_signaling.onDataChannelMessage = (dc, RTCDataChannelMessage data) {
50+
_signaling.onDataChannelMessage = (_, dc, RTCDataChannelMessage data) {
5251
setState(() {
5352
if (data.isBinary) {
5453
print('Got binary [' + data.binary.toString() + ']');
@@ -58,22 +57,32 @@ class _DataChannelSampleState extends State<DataChannelSample> {
5857
});
5958
};
6059

61-
_signaling.onDataChannel = (channel) {
60+
_signaling.onDataChannel = (_, channel) {
6261
_dataChannel = channel;
6362
};
6463

65-
_signaling.onStateChange = (SignalingState state) {
64+
_signaling.onSignalingStateChange = (SignalingState state) {
6665
switch (state) {
67-
case SignalingState.CallStateNew:
66+
case SignalingState.ConnectionClosed:
67+
case SignalingState.ConnectionError:
68+
case SignalingState.ConnectionOpen:
69+
break;
70+
}
71+
};
72+
73+
_signaling.onCallStateChange = (Session session, CallState state) {
74+
switch (state) {
75+
case CallState.CallStateNew:
6876
{
6977
setState(() {
78+
_session = session;
7079
_inCalling = true;
7180
});
7281
_timer =
7382
Timer.periodic(Duration(seconds: 1), _handleDataChannelTest);
7483
break;
7584
}
76-
case SignalingState.CallStateBye:
85+
case CallState.CallStateBye:
7786
{
7887
setState(() {
7988
_inCalling = false;
@@ -83,16 +92,14 @@ class _DataChannelSampleState extends State<DataChannelSample> {
8392
_timer = null;
8493
}
8594
_dataChannel = null;
95+
_inCalling = false;
96+
_session = null;
8697
_text = '';
8798
break;
8899
}
89-
case SignalingState.CallStateInvite:
90-
case SignalingState.CallStateConnected:
91-
case SignalingState.CallStateRinging:
92-
case SignalingState.ConnectionClosed:
93-
case SignalingState.ConnectionError:
94-
case SignalingState.ConnectionOpen:
95-
break;
100+
case CallState.CallStateInvite:
101+
case CallState.CallStateConnected:
102+
case CallState.CallStateRinging:
96103
}
97104
};
98105

@@ -126,7 +133,7 @@ class _DataChannelSampleState extends State<DataChannelSample> {
126133

127134
_hangUp() {
128135
if (_signaling != null) {
129-
_signaling.bye();
136+
_signaling.bye(_session.sid);
130137
}
131138
}
132139

0 commit comments

Comments
 (0)