connect method
void
connect(
- Uri uri,
- VoidCallback onConnected,
- StringCallback onError, {
- int timeoutSeconds = 15,
- bool ignoreBadCert = false,
override
Connects the socket to uri then invokes onConnected or onError.
Implementation
@override
void connect(Uri uri, VoidCallback onConnected, StringCallback onError,
{int timeoutSeconds = 15, bool ignoreBadCert = false}) async {
uri = '$uri'.startsWith('wss')
? Uri.parse('https' + '$uri'.substring(3))
: Uri.parse('http' + '$uri'.substring(2));
if (!tunneledSocket.connected && !tunneledSocket.connecting) {
tunneledSocket = await connectUri(uri, tunneledSocket,
secureUpgrade: (SocketInterface x) async =>
SocketImpl(await io.SecureSocket.secure(
SocketAdaptor(x),
/// https://github.com/dart-lang/sdk/issues/39690
/*io.Socket.fromRaw(RawSocketAdaptor(
x,
address: tryParseInternetAddress('127.0.0.1'),
remoteAddress: (await io.InternetAddress.lookup(uri.host)).first,
port: 1234,
remotePort: uri.port,
debugPrint: debugPrint,
)),*/
onBadCertificate: (io.X509Certificate certificate) =>
ignoreBadCert,
)));
}
HttpResponse response = await httpRequest(
uri,
'GET',
tunneledSocket,
requestHeaders: <String, String>{
'Connection': 'upgrade',
'Upgrade': 'websocket',
'sec-websocket-version': '13',
'sec-websocket-key': base64.encode(randBytes(Random.secure(), 8))
},
debugPrint: debugPrint,
);
if (response.status == 101) {
socket = io.WebSocket.fromUpgradedSocket(
SocketAdaptor(
tunneledSocket,
address: tryParseInternetAddress('127.0.0.1'),
remoteAddress: (await io.InternetAddress.lookup(uri.host)).first,
port: 1234,
remotePort: uri.port,
debugPrint: debugPrint,
),
/// https://github.com/dart-lang/sdk/issues/39690
/*io.Socket.socketFromRaw(RawSocketAdaptor(
tunneledSocket,
address: tryParseInternetAddress('127.0.0.1'),
remoteAddress: (await io.InternetAddress.lookup(uri.host)).first,
port: 1234,
remotePort: uri.port,
debugPrint: debugPrint,
)),*/
serverSide: false);
onConnected();
} else {
onError('status ${response.status} ${response.reason}');
}
tunneledSocket = null;
}