Skip to content

Commit e8c6d17

Browse files
committed
Fix bug for web.
1 parent f148961 commit e8c6d17

File tree

3 files changed

+45
-50
lines changed

3 files changed

+45
-50
lines changed

lib/src/peer.dart

Lines changed: 36 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -126,44 +126,42 @@ class Peer extends EventEmitter {
126126
var completer = new Completer();
127127
var request = Message.requestFactory(method, data);
128128
try {
129-
this._transport.send(request).then((data) {
130-
var handler = {
131-
'resolve': (data2) {
132-
var handler = _requestHandlers[request['id']];
133-
if (handler == null)
134-
completer.completeError('Request handler is not in map!');
135-
handler['timer'].cancel();
136-
this._requestHandlers.remove(request['id']);
137-
completer.complete(data2);
138-
},
139-
'reject': (error) {
140-
var handler = _requestHandlers[request['id']];
141-
if (handler == null)
142-
completer.completeError('Request handler is not in map!');
143-
handler['timer'].cancel();
144-
this._requestHandlers.remove(request['id']);
145-
completer.completeError(error);
146-
},
147-
'timer': new Timer.periodic(
148-
new Duration(milliseconds: REQUEST_TIMEOUT),
149-
(Timer timer) {
150-
timer.cancel();
151-
if (this._requestHandlers.remove(request['id']) == null)
152-
completer.completeError('Request handler is not in map!');
153-
completer.completeError('request timeout');
154-
}),
155-
close: () {
156-
var handler = _requestHandlers[request['id']];
157-
if (handler == null)
158-
completer.completeError('Request handler is not in map!');
159-
handler['timer'].cancel();
160-
completer.completeError('peer closed');
161-
}
162-
};
163-
// Add handler stuff to the Map.
164-
this._requestHandlers[request['id']] = handler;
165-
});
166-
}catch(e) {
129+
this._transport.send(request);
130+
var handler = {
131+
'resolve': (data2) {
132+
var handler = _requestHandlers[request['id']];
133+
if (handler == null)
134+
completer.completeError('Request handler is not in map!');
135+
handler['timer'].cancel();
136+
this._requestHandlers.remove(request['id']);
137+
completer.complete(data2);
138+
},
139+
'reject': (error) {
140+
var handler = _requestHandlers[request['id']];
141+
if (handler == null)
142+
completer.completeError('Request handler is not in map!');
143+
handler['timer'].cancel();
144+
this._requestHandlers.remove(request['id']);
145+
completer.completeError(error);
146+
},
147+
'timer': new Timer.periodic(new Duration(milliseconds: REQUEST_TIMEOUT),
148+
(Timer timer) {
149+
timer.cancel();
150+
if (this._requestHandlers.remove(request['id']) == null)
151+
completer.completeError('Request handler is not in map!');
152+
completer.completeError('request timeout');
153+
}),
154+
close: () {
155+
var handler = _requestHandlers[request['id']];
156+
if (handler == null)
157+
completer.completeError('Request handler is not in map!');
158+
handler['timer'].cancel();
159+
completer.completeError('peer closed');
160+
}
161+
};
162+
// Add handler stuff to the Map.
163+
this._requestHandlers[request['id']] = handler;
164+
} catch (e) {
167165
completer.completeError('transport error');
168166
}
169167
return completer.future;

lib/src/transports/websocket_dart_impl.dart

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,10 @@ class WebSocketImpl {
2020
connect({Object protocols, Object headers}) async {
2121
logger.debug('connect $_url, $headers, $protocols');
2222
try {
23-
_socket =
24-
await WebSocket.connect(_url, protocols: protocols, headers: headers);
23+
// _socket =
24+
// await WebSocket.connect(_url, protocols: protocols, headers: headers);
2525

26-
/// Allow self-signed certificate, for test only.
27-
/// var parsed_url = Grammar.parse(this._url, 'absoluteURI');
28-
/// _socket = await _connectForBadCertificate(parsed_url.scheme, parsed_url.host, parsed_url.port);
26+
_socket = await _connectForBadCertificate(_url);
2927

3028
this?.onOpen();
3129
_socket.listen((data) {
@@ -54,8 +52,7 @@ class WebSocketImpl {
5452
}
5553

5654
/// For test only.
57-
Future<WebSocket> _connectForBadCertificate(
58-
String scheme, String host, int port) async {
55+
Future<WebSocket> _connectForBadCertificate(url) async {
5956
try {
6057
Random r = new Random();
6158
String key = base64.encode(List<int>.generate(8, (_) => r.nextInt(255)));
@@ -67,9 +64,7 @@ class WebSocketImpl {
6764
return true;
6865
};
6966

70-
HttpClientRequest request = await client.getUrl(Uri.parse(
71-
(scheme == 'wss' ? 'https' : 'http') +
72-
'://$host:$port/ws')); // form the correct url here
67+
HttpClientRequest request = await client.getUrl(Uri.parse(url)); // form the correct url here
7368

7469
request.headers.add('Connection', 'Upgrade');
7570
request.headers.add('Upgrade', 'websocket');

lib/src/transports/websocket_web_impl.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ class WebSocketImpl {
1414
OnCloseCallback onClose;
1515
final logger = Logger('Logger::HTML::WebSocket');
1616

17-
WebSocketImpl(this._url);
17+
WebSocketImpl(url) {
18+
this._url = url.replaceAll('https:', 'wss:');
19+
}
1820

1921
connect({Object protocols, Object headers}) async {
2022
logger.debug('connect $_url, $headers, $protocols');
@@ -39,7 +41,7 @@ class WebSocketImpl {
3941
this?.onClose(e.code, e.reason);
4042
});
4143
} catch (e) {
42-
this?.onClose(e.code, e.reason);
44+
this?.onClose(500, e.toString());
4345
}
4446
}
4547

0 commit comments

Comments
 (0)