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 };