Files
squeezelite-esp32/components/wifi-manager/webapp/src/js/serviceHandler.ts
2025-03-18 17:38:34 -04:00

50 lines
1.5 KiB
TypeScript

// serviceHandler.ts
const { Config } = require('./proto/configuration_pb');
const { proto } = require('./proto/DataRequest_pb');
function sendRequest(type: proto.sys.request.Type, action: proto.sys.request.Action, data: any, onSuccess: (response: any) => void, onError: (error: any) => void) {
let payload:proto.sys.request.Payload = new proto.sys.request.Payload();
payload.setType(type);
payload.setAction(action);
switch (type) {
case proto.sys.request.Type.CONFIG:
payload.setConfig(data);
break;
case proto.sys.request.Type.OTA:
payload.setUrl(data);
break;
default:
break;
}
let serializedPayload = payload.serializeBinary();
console.log(`Sending data: ${serializedPayload}`)
$.ajax({
url: '/data.bin',
method: 'POST',
contentType: 'application/octet-stream',
processData: false,
data: serializedPayload,
success: function(responseData) {
try {
// Deserialize response here or pass raw data to onSuccess
let response = proto.sys.request.Response.deserializeBinary(new Uint8Array(responseData));
onSuccess(response);
} catch (error) {
console.error('Error decoding protobuf message:', error);
onError(error);
}
},
error: function(jqXHR, textStatus, errorThrown) {
console.error('Error in request:', textStatus, errorThrown);
onError(errorThrown);
}
}).fail(function (xhr, ajaxOptions, thrownError) {
handleExceptionResponse(xhr, ajaxOptions, thrownError);
});
}
export { sendRequest };