65 lines
2.1 KiB
Dart
65 lines
2.1 KiB
Dart
import 'dart:async';
|
|
import 'dart:io';
|
|
|
|
import 'package:dart_framework/platform/process.dart';
|
|
import 'package:dart_framework/utils/system_util.dart';
|
|
import 'package:oto/oto/application.dart';
|
|
import 'package:oto/oto/commands/command.dart';
|
|
import 'package:oto/oto/data/command_data.dart';
|
|
|
|
class ProcessPortUse extends Command {
|
|
@override
|
|
Future execute(DataCommand command) async {
|
|
var data = DataProcessPortUse.fromJson(getParam(command));
|
|
try {
|
|
var process = await findUsePortPid(int.parse(data.port));
|
|
var pid = process?.pid.toString();
|
|
setProperty(data.setPid, pid);
|
|
} on Exception {
|
|
rethrow;
|
|
}
|
|
return complete(0, command);
|
|
}
|
|
}
|
|
|
|
class ProcessRun extends Command {
|
|
@override
|
|
Future execute(DataCommand command) async {
|
|
var data = DataProcessRun.fromJson(getParam(command));
|
|
|
|
var exe = data.executable;
|
|
Application.log('Process Start: $exe');
|
|
var shell = StringBuffer(getCDPath(data.workspace!));
|
|
var dontKillme =
|
|
Platform.isWindows ? 'SET BUILD_ID=dontKillMe' : 'BUILD_ID=dontKillMe';
|
|
var param = data.param == null ? '' : ' ${data.param}';
|
|
shell.writeln(' $and $dontKillme $and $exe$param');
|
|
var file =
|
|
File('${Directory.systemTemp.path}/${ProcessExecutor.tempFileName}');
|
|
await file.writeAsString(shell.toString());
|
|
await Process.start(file.path, [],
|
|
runInShell: true,
|
|
workingDirectory: data.workspace,
|
|
mode: ProcessStartMode.detached);
|
|
return complete(0, command);
|
|
}
|
|
}
|
|
|
|
class ProcessKill extends Command {
|
|
@override
|
|
Future execute(DataCommand command) async {
|
|
var data = DataProcessKill.fromJson(getParam(command));
|
|
if (Process.killPid(int.parse(data.pid))) {
|
|
Application.log('Process killed');
|
|
} else {
|
|
Application.log('Process not exist');
|
|
}
|
|
return complete(0, command);
|
|
}
|
|
}
|
|
|
|
void registerProcessCommands() {
|
|
Command.register(CommandType.ProcessPortUse, () => ProcessPortUse());
|
|
Command.register(CommandType.ProcessRun, () => ProcessRun());
|
|
Command.register(CommandType.ProcessKill, () => ProcessKill());
|
|
}
|