import { ParsedMessage } from '../message_handler'; import { OperationHandler } from './operation_handler'; import { OperationPlugin } from './operation_plugin'; export abstract class OperationBase implements OperationPlugin { // Shared operation codes public static readonly operationCodes = { OK: 'OK', ERR: 'ERR', END: 'END', }; // Default handler for OK operation public static handleOk(parsedMessage: ParsedMessage): ParsedMessage { console.log('OK operation received'); return parsedMessage; // Typically, you would just acknowledge with OK, returning as-is } // Default handler for ERR operation public static handleErr(parsedMessage: ParsedMessage): ParsedMessage { console.log('ERR operation received: ', parsedMessage.metaInfo?.message || 'No error details provided'); return parsedMessage; // Typically, you would log the error and return } // Default handler for END operation public static handleEnd(parsedMessage: ParsedMessage): ParsedMessage { console.log('END operation received'); return { operationCode: OperationBase.operationCodes.END, metaInfo: { message: 'Connection ended.' }, }; } // Register the common OK, ERR, and END handlers public static registerCommonOperations(operationHandler: OperationHandler): void { operationHandler.registerHandler(OperationBase.operationCodes.OK, OperationBase.handleOk); operationHandler.registerHandler(OperationBase.operationCodes.ERR, OperationBase.handleErr); operationHandler.registerHandler(OperationBase.operationCodes.END, OperationBase.handleEnd); } // Abstract register method that will be implemented by subclasses public abstract register(operationHandler: OperationHandler): void; }