Skip to content

Commit 631f353

Browse files
authored
Merge pull request #41 from cloudwebrtc/revert-39-flutter_web
Revert "Add web support."
2 parents ce3aec1 + 67f39bb commit 631f353

11 files changed

+111
-267
lines changed

lib/main.dart

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
import 'dart:core';
22
import 'dart:io';
33
import 'package:flutter/material.dart';
4-
import 'package:flutter_webrtc/webrtc.dart';
5-
6-
import 'src/utils/key_value_store.dart'
7-
if (dart.library.js) 'src/utils/key_value_store_web.dart';
4+
import 'package:shared_preferences/shared_preferences.dart';
85
import 'package:flutter/foundation.dart'
96
show debugDefaultTargetPlatformOverride;
107

@@ -13,9 +10,13 @@ import 'src/call_sample/call_sample.dart';
1310
import 'src/call_sample/data_channel_sample.dart';
1411
import 'src/route_item.dart';
1512

13+
bool isDesktop() {
14+
return Platform.isWindows || Platform.isLinux || Platform.isMacOS;
15+
}
16+
1617
void main(){
17-
if (WebRTC.platformIsDesktop)
18-
debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia;
18+
if(isDesktop())
19+
debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia;
1920
runApp(new MyApp());
2021
}
2122

@@ -32,7 +33,7 @@ enum DialogDemoAction {
3233
class _MyAppState extends State<MyApp> {
3334
List<RouteItem> items;
3435
String _serverAddress = '';
35-
KeyValueStore keyValueStore = KeyValueStore();
36+
SharedPreferences prefs;
3637
bool _datachannel = false;
3738
@override
3839
initState() {
@@ -70,9 +71,9 @@ class _MyAppState extends State<MyApp> {
7071
}
7172

7273
_initData() async {
73-
await keyValueStore.init();
74+
prefs = await SharedPreferences.getInstance();
7475
setState(() {
75-
_serverAddress = keyValueStore.getString('server') ?? 'demo.cloudwebrtc.com';
76+
_serverAddress = prefs.getString('server') ?? 'demo.cloudwebrtc.com';
7677
});
7778
}
7879

@@ -84,13 +85,12 @@ class _MyAppState extends State<MyApp> {
8485
// The value passed to Navigator.pop() or null.
8586
if (value != null) {
8687
if (value == DialogDemoAction.connect) {
87-
keyValueStore.setString('server', _serverAddress);
88+
prefs.setString('server', _serverAddress);
8889
Navigator.push(
8990
context,
9091
MaterialPageRoute(
91-
builder: (BuildContext context) => _datachannel
92-
? DataChannelSample(ip: _serverAddress)
93-
: CallSample(ip: _serverAddress)));
92+
builder: (BuildContext context) =>
93+
_datachannel? DataChannelSample(ip: _serverAddress) : CallSample(ip: _serverAddress)));
9494
}
9595
}
9696
});

lib/src/call_sample/call_sample.dart

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:flutter/material.dart';
2+
import 'dart:io';
23
import 'dart:core';
34
import 'signaling.dart';
45
import 'package:flutter_webrtc/webrtc.dart';
@@ -16,6 +17,8 @@ class CallSample extends StatefulWidget {
1617

1718
class _CallSampleState extends State<CallSample> {
1819
Signaling _signaling;
20+
String _displayName =
21+
Platform.localHostname + '(' + Platform.operatingSystem + ")";
1922
List<dynamic> _peers;
2023
var _selfId;
2124
RTCVideoRenderer _localRenderer = new RTCVideoRenderer();
@@ -47,7 +50,8 @@ class _CallSampleState extends State<CallSample> {
4750

4851
void _connect() async {
4952
if (_signaling == null) {
50-
_signaling = new Signaling(serverIP)..connect();
53+
_signaling = new Signaling(serverIP, _displayName)
54+
..connect();
5155

5256
_signaling.onStateChange = (SignalingState state) {
5357
switch (state) {
@@ -110,7 +114,9 @@ class _CallSampleState extends State<CallSample> {
110114
_signaling.switchCamera();
111115
}
112116

113-
_muteMic() {}
117+
_muteMic() {
118+
119+
}
114120

115121
_buildRow(context, peer) {
116122
var self = (peer['id'] == _selfId);
@@ -158,26 +164,25 @@ class _CallSampleState extends State<CallSample> {
158164
floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
159165
floatingActionButton: _inCalling
160166
? new SizedBox(
161-
width: 200.0,
162-
child: new Row(
163-
mainAxisAlignment: MainAxisAlignment.spaceBetween,
164-
children: <Widget>[
165-
FloatingActionButton(
166-
child: const Icon(Icons.switch_camera),
167-
onPressed: _switchCamera,
168-
),
169-
FloatingActionButton(
170-
onPressed: _hangUp,
171-
tooltip: 'Hangup',
172-
child: new Icon(Icons.call_end),
173-
backgroundColor: Colors.pink,
174-
),
175-
FloatingActionButton(
176-
child: const Icon(Icons.mic_off),
177-
onPressed: _muteMic,
178-
)
179-
]))
180-
: null,
167+
width: 200.0,
168+
child: new Row(
169+
mainAxisAlignment: MainAxisAlignment.spaceBetween,
170+
children: <Widget>[
171+
FloatingActionButton(
172+
child: const Icon(Icons.switch_camera),
173+
onPressed: _switchCamera,
174+
),
175+
FloatingActionButton(
176+
onPressed: _hangUp,
177+
tooltip: 'Hangup',
178+
child: new Icon(Icons.call_end),
179+
backgroundColor: Colors.pink,
180+
),
181+
FloatingActionButton(
182+
child: const Icon(Icons.mic_off),
183+
onPressed: _muteMic,
184+
)
185+
])) : null,
181186
body: _inCalling
182187
? OrientationBuilder(builder: (context, orientation) {
183188
return new Container(

lib/src/call_sample/data_channel_sample.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import 'dart:core';
44
import 'dart:async';
55
import 'dart:typed_data';
66
import 'signaling.dart';
7-
import 'package:flutter_webrtc/webrtc.dart';
7+
import 'package:flutter_webrtc/rtc_data_channel.dart';
88

99
class DataChannelSample extends StatefulWidget {
1010
static String tag = 'call_sample';
@@ -19,6 +19,8 @@ class DataChannelSample extends StatefulWidget {
1919

2020
class _DataChannelSampleState extends State<DataChannelSample> {
2121
Signaling _signaling;
22+
String _displayName =
23+
Platform.localHostname + '(' + Platform.operatingSystem + ")";
2224
List<dynamic> _peers;
2325
var _selfId;
2426
bool _inCalling = false;
@@ -45,7 +47,7 @@ class _DataChannelSampleState extends State<DataChannelSample> {
4547

4648
void _connect() async {
4749
if (_signaling == null) {
48-
_signaling = new Signaling(serverIP)
50+
_signaling = new Signaling(serverIP, _displayName)
4951
..connect();
5052

5153
_signaling.onDataChannelMessage = (dc, RTCDataChannelMessage data){

lib/src/call_sample/signaling.dart

Lines changed: 67 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
import 'dart:convert';
22
import 'dart:async';
3+
import 'dart:io';
4+
import 'dart:math';
35
import 'package:flutter_webrtc/webrtc.dart';
46
import 'random_string.dart';
57

6-
import '../utils/device_info.dart'
7-
if (dart.library.js) '../utils/device_info_web.dart';
8-
import '../utils/websocket.dart'
9-
if (dart.library.js) '../utils/websocket_web.dart';
10-
118
enum SignalingState {
129
CallStateNew,
1310
CallStateRinging,
@@ -31,10 +28,11 @@ typedef void DataChannelCallback(RTCDataChannel dc);
3128

3229
class Signaling {
3330
String _selfId = randomNumeric(6);
34-
SimpleWebSocket _socket;
31+
var _socket;
3532
var _sessionId;
3633
var _host;
3734
var _port = 4443;
35+
var _displayName;
3836
var _peerConnections = new Map<String, RTCPeerConnection>();
3937
var _dataChannels = new Map<String, RTCDataChannel>();
4038
var _remoteCandidates = [];
@@ -86,7 +84,7 @@ class Signaling {
8684
'optional': [],
8785
};
8886

89-
Signaling(this._host);
87+
Signaling(this._host, this._displayName);
9088

9189
close() {
9290
if (_localStream != null) {
@@ -260,36 +258,74 @@ class Signaling {
260258
}
261259
}
262260

261+
Future<WebSocket> _connectForSelfSignedCert(String host, int port) async {
262+
try {
263+
Random r = new Random();
264+
String key = base64.encode(List<int>.generate(8, (_) => r.nextInt(255)));
265+
SecurityContext securityContext = new SecurityContext();
266+
HttpClient client = HttpClient(context: securityContext);
267+
client.badCertificateCallback =
268+
(X509Certificate cert, String host, int port) {
269+
print('Allow self-signed certificate => $host:$port. ');
270+
return true;
271+
};
272+
273+
HttpClientRequest request = await client.getUrl(
274+
Uri.parse('https://$host:$port/ws')); // form the correct url here
275+
request.headers.add('Connection', 'Upgrade');
276+
request.headers.add('Upgrade', 'websocket');
277+
request.headers.add(
278+
'Sec-WebSocket-Version', '13'); // insert the correct version here
279+
request.headers.add('Sec-WebSocket-Key', key.toLowerCase());
280+
281+
HttpClientResponse response = await request.close();
282+
Socket socket = await response.detachSocket();
283+
var webSocket = WebSocket.fromUpgradedSocket(
284+
socket,
285+
protocol: 'signaling',
286+
serverSide: false,
287+
);
288+
289+
return webSocket;
290+
} catch (e) {
291+
throw e;
292+
}
293+
}
294+
263295
void connect() async {
264-
var url = 'wss://$_host:$_port';
265-
_socket = SimpleWebSocket(url);
296+
try {
297+
/*
298+
var url = 'ws://$_host:$_port';
299+
_socket = await WebSocket.connect(url);
300+
*/
301+
_socket = await _connectForSelfSignedCert(_host, _port);
266302

267-
print('connect to $url');
303+
if (this.onStateChange != null) {
304+
this.onStateChange(SignalingState.ConnectionOpen);
305+
}
306+
307+
_socket.listen((data) {
308+
print('Recivied data: ' + data);
309+
JsonDecoder decoder = new JsonDecoder();
310+
this.onMessage(decoder.convert(data));
311+
}, onDone: () {
312+
print('Closed by server!');
313+
if (this.onStateChange != null) {
314+
this.onStateChange(SignalingState.ConnectionClosed);
315+
}
316+
});
268317

269-
_socket.onOpen = () {
270-
print('onOpen');
271-
this?.onStateChange(SignalingState.ConnectionOpen);
272318
_send('new', {
273-
'name': DeviceInfo.label,
319+
'name': _displayName,
274320
'id': _selfId,
275-
'user_agent': DeviceInfo.userAgent
321+
'user_agent':
322+
'flutter-webrtc/' + Platform.operatingSystem + '-plugin 0.0.1'
276323
});
277-
};
278-
279-
_socket.onMessage = (message) {
280-
print('Recivied data: ' + message);
281-
JsonDecoder decoder = new JsonDecoder();
282-
this.onMessage(decoder.convert(message));
283-
};
284-
285-
_socket.onClose = (int code, String reason) {
286-
print('Closed by server [$code => $reason]!');
324+
} catch (e) {
287325
if (this.onStateChange != null) {
288-
this.onStateChange(SignalingState.ConnectionClosed);
326+
this.onStateChange(SignalingState.ConnectionError);
289327
}
290-
};
291-
292-
await _socket.connect();
328+
}
293329
}
294330

295331
Future<MediaStream> createStream(media, user_screen) async {
@@ -404,6 +440,7 @@ class Signaling {
404440
_send(event, data) {
405441
data['type'] = event;
406442
JsonEncoder encoder = new JsonEncoder();
407-
_socket.send(encoder.convert(data));
443+
if (_socket != null) _socket.add(encoder.convert(data));
444+
print('send: ' + encoder.convert(data));
408445
}
409446
}

lib/src/utils/device_info.dart

Lines changed: 0 additions & 11 deletions
This file was deleted.

lib/src/utils/device_info_web.dart

Lines changed: 0 additions & 11 deletions
This file was deleted.

lib/src/utils/key_value_store.dart

Lines changed: 0 additions & 16 deletions
This file was deleted.

lib/src/utils/key_value_store_web.dart

Lines changed: 0 additions & 28 deletions
This file was deleted.

0 commit comments

Comments
 (0)