Supra_App/src/lib/core/handlers/adbPayloadHandler.ts

95 lines
2.5 KiB
TypeScript
Raw Normal View History

import { updateMachineStatus } from '../stores/machineInfoStore';
import { addNotification } from '../stores/noti';
import { handleIncomingMessages } from './messageHandler';
type AdbPayload = { type: string; payload: any };
async function handleAdbPayload(raw_payload: string) {
console.log('get payload', raw_payload);
try {
const payload: AdbPayload = JSON.parse(raw_payload);
switch (payload.type) {
case 'log':
let log_level = payload.payload['level'] ?? 'INFO';
let log_message = payload.payload['msg'] ?? '';
if (log_message !== '') addNotification(`${log_level}`);
break;
case 'response':
if (payload.payload instanceof String) {
// single message response
let raw_payload = payload.payload.toString();
if (raw_payload.startsWith('save_recipe_machine')) {
let res = raw_payload.split('/');
let pd = res[1] ?? '';
let action = res[2] ?? '';
let uiAction = res[3] ?? '';
handleIncomingMessages(
JSON.stringify({
type: 'ui_action',
payload: {
action: uiAction,
from: 'brew',
ref: `${pd}.${action}`
}
})
);
} else if (raw_payload.startsWith('state')) {
let res = raw_payload.split('/');
let new_machine_state = res[1] ?? '';
if (new_machine_state != '') {
updateMachineStatus(new_machine_state.replace('MACHINE_STATE_', ''));
}
}
}
break;
case 'ACK':
// acknowledge response from app
if (payload.payload !== 'OK') {
// abnormal
console.error('error from ACK', payload.payload);
addNotification('ERR:Request rejected');
}
break;
case 'machine':
// machine state
if (payload.payload) {
let states = payload.payload.split('/');
let curr = states[0].replace('MACHINE_STATE_', '');
let next = states[1].replace('MACHINE_STATE_', '');
console.log('current state', curr, 'next state', next);
addNotification('INFO:Machine Status Updated, ' + next);
updateMachineStatus(next);
}
break;
case 'brew-finish':
if (payload.payload) {
let plist = payload.payload.split('/');
let pd = plist[0] ?? '';
let total_time = plist[1] ?? '';
// update recipe data store
console.log('brewing finish', pd, 'total time', total_time);
}
break;
case 'error':
// show error to user from brew app
addNotification(`ERR:${payload.payload}`);
// send message to server if needed
break;
default:
}
} catch (error: any) {
// invalid format
}
}
export { handleAdbPayload };