MCPcopy Create free account
hub / github.com/MCSManager/MCSManager / OpenFrpTask

Class OpenFrpTask

daemon/src/entity/commands/task/openfrp.ts:41–115  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

39}
40
41export default class OpenFrpTask implements ILifeCycleTask {
42 public status: number = 0;
43 public name: string = "openfrp";
44 public static readonly FRP_EXE_NAME = `frpc_${os.platform()}_${os.arch()}${
45 os.platform() === "win32" ? ".exe" : ""
46 }`;
47 public static readonly FRP_EXE_PATH = path.normalize(
48 path.join(process.cwd(), "lib", OpenFrpTask.FRP_EXE_NAME)
49 );
50 public static readonly FRP_DOWNLOAD_ADDR = "https://mcsmanager.oss-cn-guangzhou.aliyuncs.com/";
51
52 async start(instance: Instance) {
53 const { openFrpToken, openFrpTunnelId } = instance.config?.extraServiceConfig;
54 if (!openFrpToken || !openFrpTunnelId) return;
55
56 if (!fs.existsSync(OpenFrpTask.FRP_EXE_PATH)) {
57 const tmpTask = setInterval(() => {
58 instance.println("FRP", $t("TXT_CODE_frp.installing"));
59 }, 2000);
60 try {
61 await downloadFileToLocalFile(
62 OpenFrpTask.FRP_DOWNLOAD_ADDR + OpenFrpTask.FRP_EXE_NAME,
63 OpenFrpTask.FRP_EXE_PATH
64 );
65 instance.println("FRP", $t("TXT_CODE_frp.done"));
66 } catch (error: any) {
67 logger.error($t("TXT_CODE_frp.downloadErr"), error);
68 instance.println("ERROR", $t("TXT_CODE_frp.downloadErr") + `: ${error}`);
69 fs.remove(OpenFrpTask.FRP_EXE_PATH, () => {});
70 return;
71 } finally {
72 clearInterval(tmpTask);
73 }
74 }
75
76 const frpProcess = new OpenFrp(openFrpToken, openFrpTunnelId);
77 frpProcess.processWrapper?.on("start", (pid: number) => {
78 if (pid) {
79 logger.info(
80 `Instance ${instance.config.nickname}(${instance.instanceUuid}) ${pid} Frp task started!`
81 );
82 logger.info(`Params: ${openFrpTunnelId} | ${openFrpToken}`);
83 instance.openFrp = frpProcess;
84 instance.info.openFrpStatus = true;
85 } else {
86 logger.warn(
87 `Instance ${instance.config.nickname}(${instance.instanceUuid}) Frp task start failed! Process ID is ${pid}`
88 );
89 }
90 });
91 frpProcess.processWrapper?.on("exit", () => {
92 logger.info(
93 `Instance ${instance.config.nickname}(${instance.instanceUuid}) Frp task stopped!`
94 );
95 instance.info.openFrpStatus = false;
96 instance.openFrp = undefined;
97 });
98

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected