Files
umbrix-libcore/extension/html/rpc/connectionPage.js
2024-09-28 20:31:38 +02:00

109 lines
3.6 KiB
JavaScript

const { hiddifyClient } = require('./client.js');
const hiddify = require("./hiddify_grpc_web_pb.js");
function openConnectionPage() {
$("#extension-list-container").show();
$("#extension-page-container").hide();
$("#connection-page").show();
connect();
$("#connect-button").click(async () => {
const hsetting_request = new hiddify.ChangeHiddifySettingsRequest();
hsetting_request.setHiddifySettingsJson($("#hiddify-settings").val());
try{
const hres=await hiddifyClient.changeHiddifySettings(hsetting_request, {});
}catch(err){
$("#hiddify-settings").val("")
console.log(err)
}
const parse_request = new hiddify.ParseRequest();
parse_request.setContent($("#config-content").val());
try{
const pres=await hiddifyClient.parse(parse_request, {});
if (pres.getResponseCode() !== hiddify.ResponseCode.OK){
alert(pres.getMessage());
return
}
$("#config-content").val(pres.getContent());
}catch(err){
console.log(err)
alert(JSON.stringify(err))
return
}
const request = new hiddify.StartRequest();
request.setConfigContent($("#config-content").val());
request.setEnableRawConfig(false);
try{
const res=await hiddifyClient.start(request, {});
console.log(res.getCoreState(),res.getMessage())
handleCoreStatus(res.getCoreState());
}catch(err){
console.log(err)
alert(JSON.stringify(err))
return
}
})
$("#disconnect-button").click(async () => {
const request = new hiddify.Empty();
try{
const res=await hiddifyClient.stop(request, {});
console.log(res.getCoreState(),res.getMessage())
handleCoreStatus(res.getCoreState());
}catch(err){
console.log(err)
alert(JSON.stringify(err))
return
}
})
}
function connect(){
const request = new hiddify.Empty();
const stream = hiddifyClient.coreInfoListener(request, {});
stream.on('data', (response) => {
console.log('Receving ',response);
handleCoreStatus(response);
});
stream.on('error', (err) => {
console.error('Error opening extension page:', err);
// openExtensionPage(extensionId);
});
stream.on('end', () => {
console.log('Stream ended');
setTimeout(connect, 1000);
});
}
function handleCoreStatus(status){
if (status == hiddify.CoreState.STOPPED){
$("#connection-before-connect").show();
$("#connection-connecting").hide();
}else{
$("#connection-before-connect").hide();
$("#connection-connecting").show();
if (status == hiddify.CoreState.STARTING){
$("#connection-status").text("Starting");
$("#connection-status").css("color", "yellow");
}else if (status == hiddify.CoreState.STOPPING){
$("#connection-status").text("Stopping");
$("#connection-status").css("color", "red");
}else if (status == hiddify.CoreState.STARTED){
$("#connection-status").text("Connected");
$("#connection-status").css("color", "green");
}
}
}
module.exports = { openConnectionPage };