11import 'dart:convert' ;
22import 'dart:async' ;
3- import 'dart:io' ;
4- import 'dart:math' ;
53import 'package:flutter_webrtc/webrtc.dart' ;
64import 'random_string.dart' ;
75
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+
811enum SignalingState {
912 CallStateNew ,
1013 CallStateRinging ,
@@ -28,11 +31,10 @@ typedef void DataChannelCallback(RTCDataChannel dc);
2831
2932class Signaling {
3033 String _selfId = randomNumeric (6 );
31- var _socket;
34+ SimpleWebSocket _socket;
3235 var _sessionId;
3336 var _host;
3437 var _port = 4443 ;
35- var _displayName;
3638 var _peerConnections = new Map <String , RTCPeerConnection >();
3739 var _dataChannels = new Map <String , RTCDataChannel >();
3840 var _remoteCandidates = [];
@@ -84,7 +86,7 @@ class Signaling {
8486 'optional' : [],
8587 };
8688
87- Signaling (this ._host, this ._displayName );
89+ Signaling (this ._host);
8890
8991 close () {
9092 if (_localStream != null ) {
@@ -258,74 +260,36 @@ class Signaling {
258260 }
259261 }
260262
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-
295263 void connect () async {
296- try {
297- /*
298- var url = 'ws://$_host:$_port';
299- _socket = await WebSocket.connect(url);
300- */
301- _socket = await _connectForSelfSignedCert (_host, _port);
264+ var url = 'wss://$_host :$_port ' ;
265+ _socket = SimpleWebSocket (url);
302266
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- });
267+ print ('connect to $url ' );
317268
269+ _socket.onOpen = () {
270+ print ('onOpen' );
271+ this ? .onStateChange (SignalingState .ConnectionOpen );
318272 _send ('new' , {
319- 'name' : _displayName ,
273+ 'name' : DeviceInfo .label ,
320274 'id' : _selfId,
321- 'user_agent' :
322- 'flutter-webrtc/' + Platform .operatingSystem + '-plugin 0.0.1'
275+ 'user_agent' : DeviceInfo .userAgent
323276 });
324- } catch (e) {
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 ]!' );
325287 if (this .onStateChange != null ) {
326- this .onStateChange (SignalingState .ConnectionError );
288+ this .onStateChange (SignalingState .ConnectionClosed );
327289 }
328- }
290+ };
291+
292+ await _socket.connect ();
329293 }
330294
331295 Future <MediaStream > createStream (media, user_screen) async {
@@ -440,7 +404,6 @@ class Signaling {
440404 _send (event, data) {
441405 data['type' ] = event;
442406 JsonEncoder encoder = new JsonEncoder ();
443- if (_socket != null ) _socket.add (encoder.convert (data));
444- print ('send: ' + encoder.convert (data));
407+ _socket.send (encoder.convert (data));
445408 }
446409}
0 commit comments