Files
WYF-koubo/electron/aigcserver/server-live.ts
T
2026-06-19 18:45:55 +08:00

125 lines
4.2 KiB
TypeScript

import {SendType, ServerApiType, ServerContext, ServerInfo} from "../mapi/server/type";
const serverRuntime = {
port: 0,
};
let shellController = null;
let isRunning = false;
export const ServerLive: ServerContext = {
ServerApi: null as ServerApiType | null,
ServerInfo: null as ServerInfo | null,
url() {
return `http://localhost:${serverRuntime.port}/`;
},
send(type: SendType, data: any) {
this.ServerApi.event.sendChannel(this.ServerInfo.eventChannelName, {type, data});
},
async _client() {
return await this.ServerApi.GradioClient.connect(this.url());
},
async init() {},
async start() {
// console.log('this.ServerApi.app.availablePort(50617)', await this.ServerApi.app.availablePort(50617))
this.send("starting", this.ServerInfo);
let command = [];
serverRuntime.port = await this.ServerApi.availablePort(serverRuntime.port, this.ServerInfo.setting);
const env = await this.ServerApi.env();
command.push(`"${this.ServerInfo.localPath}/launcher"`);
command.push(`--env=DEBUG=true`);
env["PATH"] = this.ServerApi.getPathEnv(`${this.ServerInfo.localPath}/binary`);
env["AIGCPANEL_SERVER_PORT"] = `${serverRuntime.port}`;
env["AIGCPANEL_SERVER_PLACEHOLDER_CONFIG"] = await this.ServerApi.launcherPrepareConfigJson({
id: "live",
modelConfig: {},
setting: this.ServerInfo.setting,
});
// console.log('command', JSON.stringify(command))
shellController = await this.ServerApi.app.spawnShell(command, {
stdout: data => {
this.ServerApi.file.appendText(this.ServerInfo.logFile, data, {isDataPath: true});
const result = this.ServerApi.extractResultFromLogs("live", data);
if (result) {
if (result["Action"]) {
const action = result["Action"].split(":");
this.send("action", {
type: action[0],
msg: action.length > 1 ? action[1] : "",
});
}
}
},
stderr: data => {
this.ServerApi.file.appendText(this.ServerInfo.logFile, data, {isDataPath: true});
},
success: data => {
// console.log('serverLive.success', {data})
this.send("success", this.ServerInfo);
},
error: (data, code) => {
// console.log('serverLive.error', {code, data})
this.ServerApi.file.appendText(this.ServerInfo.logFile, data, {isDataPath: true});
this.send("error", this.ServerInfo);
},
env,
cwd: this.ServerInfo.localPath,
});
},
async ping() {
try {
const res = await this.ServerApi.request(`${this.url()}ping`);
return true;
} catch (e) {
console.log("ping error", e);
}
return false;
},
async stop() {
this.send("stopping", this.ServerInfo);
try {
if (shellController) {
await shellController.stop();
}
shellController = null;
} catch (e) {
console.log("stop error", e);
}
this.send("stopped", this.ServerInfo);
},
async cancel() {
await this.ServerApi.launcherCancel(this);
},
async config() {
return {
code: 0,
msg: "ok",
data: {
httpUrl: shellController ? this.url() : null,
content: ``,
functions: {
live: {
content: ``,
param: [],
},
},
},
};
},
async apiRequest(
data: {
url: string;
param: any;
},
option: any
) {
// serverRuntime.port = 60617
// console.log('apiRequest', {url: this.url(), data, option})
const {url, param} = data;
return this.ServerApi.request(`${this.url()}${url}`, param, {
method: "POST",
});
},
};