65 lines
2.1 KiB
TypeScript
65 lines
2.1 KiB
TypeScript
export interface ParsedMessage {
|
|
operationCode: string;
|
|
metaInfo?: { [key: string]: any };
|
|
fileContent?: Buffer;
|
|
}
|
|
|
|
export class MessageHandler {
|
|
// Format the message with operationCode, guid, metaInfo, and fileContent (Base64 for fileContent)
|
|
static formatMessage(
|
|
operationCode: string,
|
|
metaInfo?: { [key: string]: any },
|
|
fileContent?: Buffer
|
|
): string {
|
|
let message = `${operationCode}\n`; // First part: operationCode and guid
|
|
|
|
if (metaInfo && Object.keys(metaInfo).length > 0) {
|
|
message += `${JSON.stringify(metaInfo)}\n`; // Add metaInfo
|
|
}
|
|
|
|
if (fileContent && fileContent.length > 0) {
|
|
message += fileContent.toString('base64'); // Convert buffer to Base64 for fileContent
|
|
}
|
|
|
|
return message;
|
|
}
|
|
|
|
// Parse the incoming message (convert Base64 back to Buffer if fileContent is present)
|
|
static parseMessage(msg: string): ParsedMessage {
|
|
const parts = msg.split('\n'); // Split by \n (operationCode, metaInfo, and fileContent are on separate lines)
|
|
|
|
// First part should always be the operation code
|
|
const operationCode = parts[0]?.trim();
|
|
if (!operationCode) {
|
|
throw new Error('Missing operation code in the message');
|
|
}
|
|
|
|
let metaInfo: { [key: string]: any } | undefined = undefined;
|
|
let fileContent: Buffer | undefined = undefined;
|
|
|
|
// Parse the metaInfo (JSON object) if present
|
|
if (parts[1]) {
|
|
try {
|
|
metaInfo = JSON.parse(parts[1].trim());
|
|
} catch (err) {
|
|
console.error('Invalid metaInfo JSON format:', err);
|
|
}
|
|
}
|
|
|
|
// Convert Base64 string back to Buffer for fileContent if present
|
|
if (parts[2]) {
|
|
fileContent = Buffer.from(parts[2].trim(), 'base64');
|
|
}
|
|
|
|
return {
|
|
operationCode,
|
|
metaInfo,
|
|
fileContent,
|
|
};
|
|
}
|
|
|
|
// Validate if the parsed message contains an operation code
|
|
static validateMessage(parsedMessage: ParsedMessage | null): boolean {
|
|
return !!parsedMessage?.operationCode;
|
|
}
|
|
} |