package com.ruoyi.cmd;
|
|
import com.ruoyi.utils.process.CmdUtils;
|
import com.sun.jna.Platform;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.context.ApplicationContextInitializer;
|
import org.springframework.context.ConfigurableApplicationContext;
|
import org.springframework.core.annotation.Order;
|
import org.springframework.core.io.ClassPathResource;
|
import org.springframework.core.io.Resource;
|
import org.springframework.core.io.ResourceLoader;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.PostConstruct;
|
import javax.annotation.PreDestroy;
|
import java.io.File;
|
import java.io.IOException;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* @Description: 外部程序启动
|
* @ClassName: startup
|
* @Author: 刘苏义
|
* @Date: 2023年09月22日9:56:57
|
**/
|
@Slf4j(topic = "cmd")
|
@Component
|
public class startup implements ApplicationContextInitializer {
|
|
//minio
|
String minioName = "minio.exe";
|
@Value("${minio.accessKey}")
|
String accessKey;
|
@Value("${minio.secretKey}")
|
String secretKey;
|
@Value("${minio.path}")
|
String path;
|
@Value("${minio.enabled}")
|
Boolean minioEnabled;
|
//mediamtx
|
String mediamtxName = "mediamtx.exe";
|
@Value("${mediamtx.enabled}")
|
Boolean mediamtxEnabled;
|
//webrtc-streamer
|
String webrtcName = "webrtc-streamer.exe";
|
@Value("${webrtc.host}")
|
String webrtcHost;
|
@Value("${webrtc.enabled}")
|
Boolean webrtcEnabled;
|
//redis
|
String redisName = "redis-server.exe";
|
|
/**
|
* 程序初始化启动redis
|
* 刘苏义
|
* 2023/9/22 10:38:41
|
*/
|
@Override
|
public void initialize(ConfigurableApplicationContext applicationContext) {
|
if (Platform.isWindows()) {
|
String exePath = System.getProperty("user.dir") + File.separator + "server" + File.separator + "redis" + File.separator + redisName;
|
List<String> cmd = new ArrayList<>();
|
cmd.add(exePath);
|
if (CmdUtils.isProcessRunning(redisName)) {
|
// 进程已经在运行,结束该进程
|
CmdUtils.stopProcess(redisName);
|
}
|
// 启动后台进程
|
CmdUtils.commandStart(redisName, cmd, null);
|
// 启动cmd窗口
|
//String[] command = {"cmd", "/c", "start", exePath, "-H127.0.0.1:8000", "-o"};
|
//CmdUtils.commandStart(command);
|
}
|
}
|
|
@PostConstruct
|
@Order(1)
|
public void init() {
|
if (minioEnabled) {
|
log.info("初始化启动minio");
|
if (Platform.isWindows()) {
|
String exePath = System.getProperty("user.dir") + File.separator + "server" + File.separator + "minio" + File.separator + minioName;
|
Map<String, String> env = new HashMap<>();
|
env.put("MINIO_ROOT_USER", accessKey);
|
env.put("MINIO_ROOT_PASSWORD", secretKey);
|
List<String> cmd = new ArrayList<>();
|
cmd.add(exePath);
|
cmd.add("server");
|
cmd.add(path);
|
cmd.add("--console-address=0.0.0.0:9000");
|
cmd.add("--address=0.0.0.0:9001");
|
if (CmdUtils.isProcessRunning(minioName)) {
|
// 进程已经在运行,结束该进程
|
CmdUtils.stopProcess(minioName);
|
}
|
// 启动后台进程
|
CmdUtils.commandStart(minioName, cmd, env);
|
// 启动cmd窗口
|
//String[] command = {"cmd", "/c", "start", exePath};
|
//CmdUtils.commandStart(command);
|
}
|
}
|
if (mediamtxEnabled) {
|
log.info("初始化启动mediaMTX");
|
if (Platform.isWindows()) {
|
String exePath = System.getProperty("user.dir") + File.separator + "server" + File.separator + "mediamtx" + File.separator + mediamtxName;
|
String ymlPath = System.getProperty("user.dir") + File.separator + "server" + File.separator + "mediamtx" + File.separator + "mediamtx.yml";
|
|
List<String> cmd = new ArrayList<>();
|
cmd.add(exePath);
|
cmd.add(ymlPath);
|
if (CmdUtils.isProcessRunning(mediamtxName)) {
|
// 进程已经在运行,结束该进程
|
CmdUtils.stopProcess(mediamtxName);
|
}
|
// 启动后台进程
|
CmdUtils.commandStart(mediamtxName, cmd, null);
|
// 启动cmd窗口
|
// String[] command = {"cmd","/c","start",exePath,ymlPath};
|
// CmdUtils.commandStart(command);
|
}
|
}
|
if (webrtcEnabled) {
|
log.info("初始化启动webrtc-streamer");
|
if (Platform.isWindows()) {
|
String exePath = System.getProperty("user.dir") + File.separator + "server" + File.separator + "webrtc" + File.separator + webrtcName;
|
List<String> cmd = new ArrayList<>();
|
cmd.add(exePath);
|
cmd.add("-H" + webrtcHost);
|
cmd.add("-o");
|
if (CmdUtils.isProcessRunning(webrtcName)) {
|
// 进程已经在运行,结束该进程
|
CmdUtils.stopProcess(webrtcName);
|
}
|
// 启动后台进程
|
CmdUtils.commandStart(webrtcName, cmd, null);
|
// 启动cmd窗口
|
// String[] command = {"cmd", "/c", "start", exePath, "-H127.0.0.1:8000", "-o"};
|
// CmdUtils.commandStart(command);
|
}
|
}
|
}
|
|
@PreDestroy
|
public void destroy() {
|
if (minioEnabled) {
|
log.info("销毁minio");
|
if (CmdUtils.isProcessRunning(minioName)) {
|
// 进程已经在运行,结束该进程
|
CmdUtils.stopProcess(minioName);
|
}
|
}
|
if (mediamtxEnabled) {
|
log.info("销毁mediaMtx");
|
if (CmdUtils.isProcessRunning(mediamtxName)) {
|
// 进程已经在运行,结束该进程
|
CmdUtils.stopProcess(mediamtxName);
|
}
|
}
|
if (webrtcEnabled) {
|
log.info("销毁webrtc-streamer");
|
if (CmdUtils.isProcessRunning(webrtcName)) {
|
// 进程已经在运行,结束该进程
|
CmdUtils.stopProcess(webrtcName);
|
}
|
}
|
if (true) {
|
log.info("销毁redis");
|
if (CmdUtils.isProcessRunning(redisName)) {
|
// 进程已经在运行,结束该进程
|
CmdUtils.stopProcess(redisName);
|
}
|
}
|
}
|
}
|