type PluginService interface {
// Call service function from GUI
Call(operator string, function string, args string)
}
// 1. Service initialization (called on load)
function InitService() {
// Optional: initial setup
}
// 2. Data handler from server (called when receiving data via TsServiceSendData*)
function data_handler(data) {
let response = JSON.parse(data);
switch (response.action) {
case "config":
// Show configuration dialog
buildConfigDialog(response);
break;
case "result":
if (response.success) {
ax.show_message("Success", "Operation completed!");
} else {
ax.show_message("Error", response.error);
}
break;
}
}
// Service metadata
var metadata = {
name: "My Service",
description: "Service description"
};
// Add item to Settings menu
let settings_action = menu.create_action("My Service Settings", function() {
// Request configuration from server
ax.service_command("my_service", "get_config", {});
});
menu.add_main_settings(settings_action);
// Settings dialog example
function buildConfigDialog(config) {
let label = form.create_label("API Key:");
let text_key = form.create_textline(config.api_key || "");
let check_enabled = form.create_check("Enable service");
check_enabled.setChecked(config.enabled || false);
let layout = form.create_vlayout();
layout.addWidget(label);
layout.addWidget(text_key);
layout.addWidget(check_enabled);
let dialog = form.create_dialog("Service Settings");
dialog.setSize(400, 200);
dialog.setLayout(layout);
if (dialog.exec()) {
// Send new configuration to server
ax.service_command("my_service", "set_config", {
api_key: text_key.text(),
enabled: check_enabled.isChecked()
});
}
}