Skip to content

Commit

Permalink
CLI: Simple launch function implement
Browse files Browse the repository at this point in the history
  • Loading branch information
Muska-Ami committed Jul 19, 2024
1 parent 925a50f commit b2ea544
Show file tree
Hide file tree
Showing 8 changed files with 85 additions and 49 deletions.
18 changes: 12 additions & 6 deletions nyalcf_cli/bin/nyalcf_cli.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import 'dart:io';

import 'package:args/args.dart';
import 'package:nyalcf/actions/config.dart';
import 'package:nyalcf/actions/login.dart';
import 'package:nyalcf/commands/config.dart';
import 'package:nyalcf/commands/login.dart';
import 'package:nyalcf/arguments.dart';
import 'package:nyalcf/commands/start.dart';
import 'package:nyalcf/utils/path_provider.dart';
import 'package:nyalcf/utils/state.dart';
import 'package:nyalcf_core/storages/injector.dart';
Expand Down Expand Up @@ -31,10 +32,6 @@ void main(List<String> arguments) async {
await StoragesInjector.init();
await Logger.init();

if (await File('$appSupportPath/session.json').exists()) {
await UserInfoStorage.read();
}

Logger.debug('Append info has been set: $appendInfo');

final ArgParser argParser = buildParser();
Expand All @@ -48,6 +45,7 @@ void main(List<String> arguments) async {
return;
}

// 登录登出
if (results.wasParsed('login')) {
await Login().main(results.rest);
}
Expand All @@ -56,10 +54,18 @@ void main(List<String> arguments) async {
Logger.info('Session data removed.');
}

// 启动 Frpc
if (results.wasParsed('start')) {
await Start().main(results.rest);
}

// 版本信息
if (results.wasParsed('version')) {
Logger.info('Nya LoCyanFrp! CLI version: $version');
return;
}

// 配置修改
if (results.wasParsed('config')) {
Config().main(results.rest);
}
Expand Down
18 changes: 0 additions & 18 deletions nyalcf_cli/lib/actions/launch.dart

This file was deleted.

6 changes: 6 additions & 0 deletions nyalcf_cli/lib/arguments.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ class Arguments {
negatable: false,
help: 'Logout to LoCyanFrp.',
)
..addFlag(
'start',
abbr: 's',
negatable: false,
help: 'Start frpc. usage: ..<proxy_id>',
)
..addFlag(
'config',
abbr: 'c',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,9 @@
import 'package:nyalcf/utils/template/command_implement.dart';
import 'package:nyalcf/utils/templates/command_implement.dart';
import 'package:nyalcf_core/storages/configurations/launcher_configuration_storage.dart';
import 'package:nyalcf_core/utils/logger.dart';
import 'package:nyalcf/utils/state.dart';

class Config implements CommandImplement {
@override
bool result = false;

@override
bool end() {
return result;
}

final _lcs = LauncherConfigurationStorage();

@override
Expand All @@ -28,7 +20,6 @@ class Config implements CommandImplement {
_lcs.cfg.set(args[1], convertedValue);
_lcs.save();
Logger.info('Node "${args[1]}" has been set to: "${args[2]}"');
result = true;
} else {
Logger.error(
'Could not set ${args[1]} to ${args[2]}: could not automatic convert type to origin type, please edit the configuration manually.');
Expand Down Expand Up @@ -57,4 +48,5 @@ class Config implements CommandImplement {
return null;
}
}

}
Original file line number Diff line number Diff line change
@@ -1,18 +1,11 @@
import 'package:nyalcf/utils/template/command_implement.dart';
import 'package:nyalcf/utils/templates/command_implement.dart';
import 'package:nyalcf/utils/text_encrypt.dart';
import 'package:nyalcf_core/models/user_info_model.dart';
import 'package:nyalcf_core/network/dio/auth/auth.dart';
import 'package:nyalcf_core/storages/stores/user_info_storage.dart';
import 'package:nyalcf_core/utils/logger.dart';

class Login implements CommandImplement {
@override
bool result = false;

@override
bool end() {
return result;
}

@override
Future<void> main(List<String> args) async {
Expand All @@ -30,10 +23,10 @@ class Login implements CommandImplement {
Logger.info('- traffic left: ${userInfo.traffic / 1024}GiB');
await UserInfoStorage.save(userInfo);
Logger.info('Session saved.');
result = true;
}
} else {
Logger.error('No valid arguments provided.');
}
}

}
52 changes: 52 additions & 0 deletions nyalcf_cli/lib/commands/start.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import 'dart:convert';
import 'dart:io';

import 'package:nyalcf/utils/state.dart';
import 'package:nyalcf/utils/templates/command_implement.dart';
import 'package:nyalcf_core/utils/logger.dart';
import 'package:nyalcf_core/storages/stores/frpc_storage.dart';

class Start implements CommandImplement {
@override
Future<void> main(List<String> args) async {
if (args.isNotEmpty) {
final user = await userInfo;
if (user != null) {
for (var proxyId in args) {
final frpcPath = await FrpcStorage().getFilePath();
final runPath = await FrpcStorage().getRunPath();

if (frpcPath != null) {
final process = await Process.start(
frpcPath,
[
'-u',
user.frpToken,
'-p',
proxyId,
],
workingDirectory: runPath,
);
process.stdout.forEach((List<int> element) {
final RegExp regex = RegExp(r'\x1B\[[0-9;]*[mK]');
final String fmtStr = utf8.decode(element).trim().replaceAll(regex, '');
Logger.frpcInfo(proxyId, fmtStr);
});
process.stderr.forEach((List<int> element) {
final RegExp regex = RegExp(r'\x1B\[[0-9;]*[mK]');
final String fmtStr = utf8.decode(element).trim().replaceAll(regex, '');
Logger.frpcError(proxyId, fmtStr);
});
Logger.info('Started proxy: $proxyId');
} else {
Logger.error('You have no frpc installed yet!');
}
}
} else {
Logger.error('You have no login session yet!');
}
} else {
Logger.error('No valid arguments provided.');
}
}
}
11 changes: 11 additions & 0 deletions nyalcf_cli/lib/utils/state.dart
Original file line number Diff line number Diff line change
@@ -1 +1,12 @@
import 'dart:io';

import 'package:nyalcf_core/models/user_info_model.dart';
import 'package:nyalcf_core/storages/stores/user_info_storage.dart';
import 'package:nyalcf_inject/path_provider.dart';

bool verbose = false;

Future<UserInfoModel?> get userInfo async =>
await File('$appSupportPath/session.json').exists()
? await UserInfoStorage.read()
: null;
Original file line number Diff line number Diff line change
@@ -1,10 +1,4 @@
abstract class CommandImplement {

bool result = false;

/// 入口函数
void main(List<String> args);

/// 执行完毕结果
bool end();
}

0 comments on commit b2ea544

Please sign in to comment.