|
@@ -2,6 +2,7 @@ import 'dart:io';
|
|
|
import 'dart:async';
|
|
|
import 'dart:convert';
|
|
|
|
|
|
+
|
|
|
import 'package:dio/dio.dart';
|
|
|
import 'package:get/get.dart';
|
|
|
import 'package:naiyouwl/app/bean/ClashServiceInfo.dart';
|
|
@@ -82,6 +83,7 @@ class ServiceController extends GetxController {
|
|
|
try {
|
|
|
final data = await fetchInfo();
|
|
|
if(data.mode == 'service-mode'){
|
|
|
+ serviceMode.value = true;
|
|
|
controllers.global.updateMsg("服务模式");
|
|
|
await serviceModeSwitch(false);
|
|
|
}
|
|
@@ -247,7 +249,18 @@ class ServiceController extends GetxController {
|
|
|
controllers.global.updateMsg("启动内核");
|
|
|
}
|
|
|
coreStatus.value = RunningState.starting;
|
|
|
- await fetchStart(controllers.config.config.value.selected);
|
|
|
+ // final res = await _dio.post<String>('/start', data: {
|
|
|
+ // "args": ['-d', Paths.config.path, '-f', path.join(Paths.config.path, name)]
|
|
|
+ // });
|
|
|
+ final res = await runCCore(Files.assetsCCore.path, ['-d', Paths.config.path, '-f', path.join(Paths.config.path, controllers.config.config.value.selected)]);
|
|
|
+ if (res.exitCode != 0) {
|
|
|
+ controllers.global.updateMsg("启动内核失败");
|
|
|
+ coreStatus.value = RunningState.error;
|
|
|
+ throw res.stderr;
|
|
|
+
|
|
|
+ }
|
|
|
+ coreStatus.value = RunningState.running;
|
|
|
+ //await fetchStart(controllers.config.config.value.selected);
|
|
|
log.debug("api${controllers.config.clashCoreApiAddress.value}");
|
|
|
controllers.core.setApi(controllers.config.clashCoreApiAddress.value, controllers.config.clashCoreApiSecret.value);
|
|
|
while (true) {
|
|
@@ -268,13 +281,13 @@ class ServiceController extends GetxController {
|
|
|
}
|
|
|
}
|
|
|
await controllers.core.updateConfig();
|
|
|
- if (Platform.isMacOS &&
|
|
|
- controllers.service.serviceMode.value &&
|
|
|
- controllers.config.clashCoreTunEnable.value &&
|
|
|
- controllers.config.clashCoreDns.isNotEmpty) {
|
|
|
- await MacSystemDns.instance.set([controllers.config.clashCoreDns.value]);
|
|
|
- }
|
|
|
- if (controllers.config.config.value.setSystemProxy) await SystemProxy.instance.set(controllers.core.proxyConfig);
|
|
|
+ // if (Platform.isMacOS &&
|
|
|
+ // controllers.service.serviceMode.value &&
|
|
|
+ // controllers.config.clashCoreTunEnable.value &&
|
|
|
+ // controllers.config.clashCoreDns.isNotEmpty) {
|
|
|
+ // await MacSystemDns.instance.set([controllers.config.clashCoreDns.value]);
|
|
|
+ // }
|
|
|
+ // if (controllers.config.config.value.setSystemProxy) await SystemProxy.instance.set(controllers.core.proxyConfig);
|
|
|
coreStatus.value = RunningState.running;
|
|
|
controllers.global.updateMsg("内核状态:${coreStatus.value == RunningState.running} ");
|
|
|
controllers.global.updateDate();
|
|
@@ -289,14 +302,15 @@ class ServiceController extends GetxController {
|
|
|
|
|
|
Future<void> stopClashCore() async {
|
|
|
coreStatus.value = RunningState.stopping;
|
|
|
- if (Platform.isMacOS &&
|
|
|
- controllers.service.serviceMode.value &&
|
|
|
- controllers.config.clashCoreTunEnable.value &&
|
|
|
- controllers.config.clashCoreDns.isNotEmpty) {
|
|
|
- await MacSystemDns.instance.set([]);
|
|
|
- }
|
|
|
- if (controllers.config.config.value.setSystemProxy) await SystemProxy.instance.set(SystemProxyConfig());
|
|
|
- await fetchStop();
|
|
|
+ // if (Platform.isMacOS &&
|
|
|
+ // controllers.service.serviceMode.value &&
|
|
|
+ // controllers.config.clashCoreTunEnable.value &&
|
|
|
+ // controllers.config.clashCoreDns.isNotEmpty) {
|
|
|
+ // await MacSystemDns.instance.set([]);
|
|
|
+ // }
|
|
|
+ //if (controllers.config.config.value.setSystemProxy) await SystemProxy.instance.set(SystemProxyConfig());
|
|
|
+ await stopClash();
|
|
|
+ //await fetchStop();
|
|
|
coreStatus.value = RunningState.stoped;
|
|
|
}
|
|
|
Future<void> initClashCoreConfig() async {
|
|
@@ -304,9 +318,11 @@ class ServiceController extends GetxController {
|
|
|
//await stopClashCore();
|
|
|
await startClashCore();
|
|
|
if (coreStatus.value == RunningState.error) {
|
|
|
+ controllers.global.updateMsg("启动内核失败...");
|
|
|
//BotToast.showText(text: '重启失败');
|
|
|
} else {
|
|
|
await controllers.core.updateVersion();
|
|
|
+ controllers.global.updateMsg("启动内核成功...");
|
|
|
//BotToast.showText(text: '重启成功');
|
|
|
}
|
|
|
}
|
|
@@ -319,20 +335,20 @@ class ServiceController extends GetxController {
|
|
|
}
|
|
|
Future<void> reloadClashCore() async {
|
|
|
controllers.config.config.value.selected = 'proxy.yaml';
|
|
|
- // if( coreStatus.value == RunningState.running){
|
|
|
- // await controllers.core.fetchReloadConfig({"path": path.join(Paths.config.path, controllers.config.config.value.selected),"payload":""});
|
|
|
- // }
|
|
|
- //BotToast.showText(text: '正在重启 Core ……');
|
|
|
- controllers.global.updateMsg("停止内核...");
|
|
|
- await stopClashCore();
|
|
|
- await controllers.config.readClashCoreApi();
|
|
|
- await startClashCore();
|
|
|
- if (coreStatus.value == RunningState.error) {
|
|
|
- controllers.global.updateMsg("启动内核失败...");
|
|
|
- } else {
|
|
|
- await controllers.core.updateVersion();
|
|
|
- controllers.global.updateMsg("启动内核成功...");
|
|
|
+ if( coreStatus.value == RunningState.running){
|
|
|
+ await controllers.core.fetchReloadConfig({"path": path.join(Paths.config.path, controllers.config.config.value.selected),"payload":""});
|
|
|
}
|
|
|
+ //BotToast.showText(text: '正在重启 Core ……');
|
|
|
+ // controllers.global.updateMsg("停止内核...");
|
|
|
+ // await stopClashCore();
|
|
|
+ // await controllers.config.readClashCoreApi();
|
|
|
+ // await startClashCore();
|
|
|
+ // if (coreStatus.value == RunningState.error) {
|
|
|
+ // controllers.global.updateMsg("启动内核失败...");
|
|
|
+ // } else {
|
|
|
+ // await controllers.core.updateVersion();
|
|
|
+ // controllers.global.updateMsg("启动内核成功...");
|
|
|
+ // }
|
|
|
}
|
|
|
|
|
|
Future<int> getFreePort() async {
|