stopCfResolutionWebviewServer()

Stop the cf server on app exit
This commit is contained in:
NBA2K1 2025-11-29 00:18:13 +01:00
parent 5c34dcab9a
commit 5fdbf530cb
2 changed files with 35 additions and 12 deletions

View file

@ -157,6 +157,7 @@ class _MyAppState extends ConsumerState<MyApp> {
void dispose() {
_linkSubscription?.cancel();
discordRpc?.destroy();
stopCfResolutionWebviewServer();
AppLogger.dispose();
super.dispose();
}

View file

@ -292,22 +292,44 @@ class ResolveCloudFlareChallenge extends RetryPolicy {
}
int cfPort = 0;
HttpServer? _cfServer;
/// Cloudflare Resolution Webview Server
Future<void> cfResolutionWebviewServer() async {
final server = await HttpServer.bind(InternetAddress.loopbackIPv4, cfPort);
cfPort = server.port;
try {
_cfServer = await HttpServer.bind(InternetAddress.loopbackIPv4, cfPort);
cfPort = _cfServer!.port;
_cfServer!.listen(
(HttpRequest request) {
if (request.method == 'POST' && request.uri.path == '/resolve_cf') {
_handleResolveCf(request);
} else {
request.response
..statusCode = HttpStatus.notFound
..write('Not Found')
..close();
}
},
onError: (e, st) {
debugPrint("CF server listener error: $e\n$st");
},
cancelOnError: false,
);
} catch (e, st) {
debugPrint("Couldn't start Cloudflare Resolution Webview Server: $e\n$st");
botToast("Couldn't start Cloudflare Resolution Webview Server.");
}
}
server.listen((HttpRequest request) {
if (request.method == 'POST' && request.uri.path == '/resolve_cf') {
_handleResolveCf(request);
} else {
request.response
..statusCode = HttpStatus.notFound
..write('Not Found')
..close();
}
});
Future<void> stopCfResolutionWebviewServer() async {
final server = _cfServer;
if (server == null) return;
try {
await server.close(force: true);
} finally {
_cfServer = null;
cfPort = 0;
}
}
void _handleResolveCf(HttpRequest request) async {