|
@@ -32,6 +32,7 @@ class ServiceController extends GetxController {
|
|
|
var serviceStatus = RunningState.stoped.obs;
|
|
|
|
|
|
Process? clashServiceProcess;
|
|
|
+ Process? clashCoreProcess;
|
|
|
|
|
|
bool get isRunning => serviceStatus.value == RunningState.running && coreStatus.value == RunningState.running;
|
|
|
bool get isCanOperationService =>
|
|
@@ -74,7 +75,7 @@ class ServiceController extends GetxController {
|
|
|
}
|
|
|
|
|
|
Future<void> isService() async {
|
|
|
- controllers.global.updateMsg("判断是不是 service-mode");
|
|
|
+ //controllers.global.updateMsg("判断是不是 service-mode");
|
|
|
//serviceStatus.value = RunningState.starting;
|
|
|
if (Platform.isLinux) {
|
|
|
await fixBinaryExecutePermissions(Files.assetsClashService);
|
|
@@ -242,42 +243,35 @@ class ServiceController extends GetxController {
|
|
|
|
|
|
Future<void> startClashCore() async {
|
|
|
try {
|
|
|
- //controllers.global.updateMsg("启动内核");
|
|
|
+ controllers.global.updateMsg("启动内核---${controllers.config.config.value.selected}");
|
|
|
if( controllers.config.config.value.selected == 'init_proxy.yaml'){
|
|
|
controllers.global.updateMsg("启动内核初始化");
|
|
|
} else {
|
|
|
controllers.global.updateMsg("启动内核");
|
|
|
}
|
|
|
coreStatus.value = RunningState.starting;
|
|
|
- // 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;
|
|
|
+ int? exitCode;
|
|
|
+ clashCoreProcess = await Process.start(Files.assetsCCore.path, ['-d', Paths.config.path, '-f', path.join(Paths.config.path, controllers.config.config.value.selected)], mode: ProcessStartMode.inheritStdio);
|
|
|
+ clashCoreProcess!.exitCode.then((code) => exitCode = code);
|
|
|
|
|
|
- }
|
|
|
- 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);
|
|
|
+ if (exitCode != null)
|
|
|
+ {
|
|
|
+ controllers.global.updateMsg("启动内核错误");
|
|
|
+ return;
|
|
|
+ }
|
|
|
while (true) {
|
|
|
+ log.debug("等待内核请动...");
|
|
|
await Future.delayed(const Duration(milliseconds: 200));
|
|
|
- final info = await fetchInfo();
|
|
|
- if (info.status == 'running') {
|
|
|
- try {
|
|
|
- final ret = await controllers.core.fetchHello();
|
|
|
- log.debug("请求内核结果$ret---服务器状态${info.status}...");
|
|
|
- // controllers.global.updateMsg("请求内核结果$ret---服务器状态${info.status}...");
|
|
|
- break;
|
|
|
- } catch (_) {
|
|
|
- //controllers.global.updateMsg("请求内核错误${e.toString()}---服务器状态${info.status}...");
|
|
|
- }
|
|
|
- } else {
|
|
|
- controllers.global.updateMsg("启动内核错误---等待中...");
|
|
|
- throw '启动内核错误,请检测是否被杀毒拦截,或者端口是否被占用';
|
|
|
+ try {
|
|
|
+ final ret = await controllers.core.fetchHello();
|
|
|
+ log.debug("请求内核结果$ret...");
|
|
|
+ // controllers.global.updateMsg("请求内核结果$ret---服务器状态${info.status}...");
|
|
|
+ break;
|
|
|
+ } catch (_) {
|
|
|
+ //controllers.global.updateMsg("请求内核错误${e.toString()}---服务器状态${info.status}...");
|
|
|
}
|
|
|
}
|
|
|
await controllers.core.updateConfig();
|
|
@@ -302,6 +296,12 @@ class ServiceController extends GetxController {
|
|
|
|
|
|
Future<void> stopClashCore() async {
|
|
|
coreStatus.value = RunningState.stopping;
|
|
|
+ await controllers.global.closeProxy();
|
|
|
+ if(clashCoreProcess != null){
|
|
|
+ clashCoreProcess?.kill();
|
|
|
+ }
|
|
|
+
|
|
|
+ // killProcess(ClashName.name);
|
|
|
// if (Platform.isMacOS &&
|
|
|
// controllers.service.serviceMode.value &&
|
|
|
// controllers.config.clashCoreTunEnable.value &&
|
|
@@ -309,7 +309,7 @@ class ServiceController extends GetxController {
|
|
|
// await MacSystemDns.instance.set([]);
|
|
|
// }
|
|
|
//if (controllers.config.config.value.setSystemProxy) await SystemProxy.instance.set(SystemProxyConfig());
|
|
|
- await stopClash();
|
|
|
+ //await stopClash();
|
|
|
//await fetchStop();
|
|
|
coreStatus.value = RunningState.stoped;
|
|
|
}
|
|
@@ -330,14 +330,22 @@ class ServiceController extends GetxController {
|
|
|
Future<void> stopClash() async {
|
|
|
controllers.config.config.value.selected = 'init_proxy.yaml';
|
|
|
if( coreStatus.value == RunningState.running){
|
|
|
+ await controllers.config.readClashCoreApi();
|
|
|
+ controllers.core.setApi(controllers.config.clashCoreApiAddress.value, controllers.config.clashCoreApiSecret.value);
|
|
|
await controllers.core.fetchReloadConfig({"path": path.join(Paths.config.path, controllers.config.config.value.selected),"payload": ""});
|
|
|
}
|
|
|
}
|
|
|
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":""});
|
|
|
- }
|
|
|
+ // if( coreStatus.value == RunningState.running){
|
|
|
+ // controllers.global.updateMsg("重新配置...");
|
|
|
+ // await controllers.config.readClashCoreApi();
|
|
|
+ // controllers.global.updateMsg("${controllers.config.clashCoreApiAddress.value}...");
|
|
|
+ // controllers.core.setApi(controllers.config.clashCoreApiAddress.value, controllers.config.clashCoreApiSecret.value);
|
|
|
+ // controllers.global.updateMsg("setApi${controllers.config.clashCoreApiAddress.value}...");
|
|
|
+ // await controllers.core.fetchReloadConfig({"path": path.join(Paths.config.path, controllers.config.config.value.selected),"payload":""});
|
|
|
+ // controllers.global.updateMsg("fetchReloadConfig${controllers.config.clashCoreApiAddress.value}...");
|
|
|
+ // }
|
|
|
//BotToast.showText(text: '正在重启 Core ……');
|
|
|
// controllers.global.updateMsg("停止内核...");
|
|
|
// await stopClashCore();
|