From 64c62e616bab1950c77476255d4efbdc60ddc5ee Mon Sep 17 00:00:00 2001 From: narawat Date: Mon, 23 Feb 2026 22:06:57 +0700 Subject: [PATCH] update --- docs/architecture.md | 6 ++--- docs/implementation.md | 50 ++++++++++++++++++++--------------------- examples/tutorial.md | 32 +++++++++++++------------- examples/walkthrough.md | 32 +++++++++++++------------- 4 files changed, 60 insertions(+), 60 deletions(-) diff --git a/docs/architecture.md b/docs/architecture.md index dd3314a..fee3cb2 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -103,9 +103,9 @@ smartsend( ) # Receive returns a dictionary envelope with all metadata and deserialized payloads -envelope = smartreceive(msg, fileserverDownloadHandler, max_retries, base_delay, max_delay) -# envelope["payloads"] = [("dataname1", data1, type1), ("dataname2", data2, type2), ...] -# envelope["correlationId"], envelope["msgId"], etc. +env = smartreceive(msg, fileserverDownloadHandler, max_retries, base_delay, max_delay) +# env["payloads"] = [("dataname1", data1, type1), ("dataname2", data2, type2), ...] +# env["correlationId"], env["msgId"], etc. ``` ## Architecture Diagram diff --git a/docs/implementation.md b/docs/implementation.md index 1ec9f2d..9a02d5d 100644 --- a/docs/implementation.md +++ b/docs/implementation.md @@ -59,9 +59,9 @@ smartsend("/test", [(dataname1, data1, "text")], ...) smartsend("/test", [(dataname1, data1, "dictionary"), (dataname2, data2, "table")], ...) # Receive returns a dictionary envelope with all metadata and deserialized payloads -envelope = smartreceive(msg, ...) -# envelope["payloads"] = [(dataname1, data1, "text"), (dataname2, data2, "table"), ...] -# envelope["correlationId"], envelope["msgId"], etc. +env = smartreceive(msg, ...) +# env["payloads"] = [(dataname1, data1, "text"), (dataname2, data2, "table"), ...] +# env["correlationId"], env["msgId"], etc. ``` ## Cross-Platform Interoperability @@ -104,8 +104,8 @@ smartsend("/cross_platform", data, nats_url="nats://localhost:4222") ```javascript // JavaScript receiver const { smartreceive } = require('./src/NATSBridge'); -const envelope = await smartreceive(msg); -// envelope.payloads[0].data === "Hello from Julia!" +const env = await smartreceive(msg); +// env.payloads[0].data === "Hello from Julia!" ``` ```python @@ -330,18 +330,18 @@ const nc = await connect({ servers: ['nats://localhost:4222'] }); const sub = nc.subscribe("control"); for await (const msg of sub) { - const envelope = await smartreceive(msg); + const env = await smartreceive(msg); // Process the payloads from the envelope - for (const payload of envelope.payloads) { + for (const payload of env.payloads) { const { dataname, data, type } = payload; console.log(`Received ${dataname} of type ${type}`); console.log(`Data: ${JSON.stringify(data)}`); } // Also access envelope metadata - console.log(`Correlation ID: ${envelope.correlationId}`); - console.log(`Message ID: ${envelope.msgId}`); + console.log(`Correlation ID: ${env.correlationId}`); + console.log(`Message ID: ${env.msgId}`); } ``` @@ -369,11 +369,11 @@ env, env_json_str = SmartSend("analysis_results", [("table_data", df, "table")]) ```javascript const { smartreceive } = require('./src/NATSBridge'); -const envelope = await smartreceive(msg); +const env = await smartreceive(msg); // Use table data from the payloads field // Note: Tables are sent as arrays of objects in JavaScript -const table = envelope.payloads; +const table = env.payloads; ``` ### Scenario 3: Live Binary Processing @@ -423,10 +423,10 @@ from nats_bridge import smartreceive # Receive binary data def process_binary(msg): - envelope = smartreceive(msg) + env = smartreceive(msg) - # Process the binary data from envelope.payloads - for dataname, data, type in envelope["payloads"]: + # Process the binary data from env.payloads + for dataname, data, type in env["payloads"]: if type == "binary": # data is bytes print(f"Received binary data: {dataname}, size: {len(data)}") @@ -439,10 +439,10 @@ const { smartreceive } = require('./src/NATSBridge'); // Receive binary data function process_binary(msg) { - const envelope = await smartreceive(msg); + const env = await smartreceive(msg); - // Process the binary data from envelope.payloads - for (const payload of envelope.payloads) { + // Process the binary data from env.payloads + for (const payload of env.payloads) { if (payload.type === "binary") { // data is an ArrayBuffer or Uint8Array console.log(`Received binary data: ${payload.dataname}, size: ${payload.data.length}`); @@ -483,8 +483,8 @@ const consumer = await js.pullSubscribe("health", { // Process historical and real-time messages for await (const msg of consumer) { - const envelope = await smartreceive(msg); - // envelope.payloads contains the list of payloads + const env = await smartreceive(msg); + // env.payloads contains the list of payloads // Each payload has: dataname, data, type msg.ack(); } @@ -501,10 +501,10 @@ import json # Device configuration handler def handle_device_config(msg): - envelope = smartreceive(msg) + env = smartreceive(msg) # Process configuration from payloads - for dataname, data, type in envelope["payloads"]: + for dataname, data, type in env["payloads"]: if type == "dictionary": print(f"Received configuration: {data}") # Apply configuration to device @@ -523,7 +523,7 @@ def handle_device_config(msg): "device/response", [("config", config, "dictionary")], nats_url="nats://localhost:4222", - reply_to=envelope.get("replyTo") + reply_to=env.get("replyTo") ) ``` @@ -583,11 +583,11 @@ smartsend( const { smartreceive, smartsend } = require('./src/NATSBridge'); // Receive NATS message with direct transport -const envelope = await smartreceive(msg); +const env = await smartreceive(msg); // Decode Base64 payload (for direct transport) -// For tables, data is in envelope.payloads -const table = envelope.payloads; // Array of objects +// For tables, data is in env.payloads +const table = env.payloads; // Array of objects // User makes selection const selection = uiComponent.getSelectedOption(); diff --git a/examples/tutorial.md b/examples/tutorial.md index 9a4b89d..220df84 100644 --- a/examples/tutorial.md +++ b/examples/tutorial.md @@ -159,8 +159,8 @@ println("Message sent!") from nats_bridge import smartreceive # Receive and process message -envelope = smartreceive(msg) -for dataname, data, type in envelope["payloads"]: +env = smartreceive(msg) +for dataname, data, type in env["payloads"]: print(f"Received {dataname}: {data}") ``` @@ -170,8 +170,8 @@ for dataname, data, type in envelope["payloads"]: const { smartreceive } = require('./src/NATSBridge'); // Receive and process message -const envelope = await smartreceive(msg); -for (const payload of envelope.payloads) { +const env = await smartreceive(msg); +for (const payload of env.payloads) { console.log(`Received ${payload.dataname}: ${payload.data}`); } ``` @@ -182,8 +182,8 @@ for (const payload of envelope.payloads) { using NATSBridge # Receive and process message -envelope = smartreceive(msg, fileserverDownloadHandler) -for (dataname, data, type) in envelope["payloads"] +env = smartreceive(msg, fileserverDownloadHandler) +for (dataname, data, type) in env["payloads"] println("Received $dataname: $data") end ``` @@ -313,10 +313,10 @@ const { smartreceive, smartsend } = require('./src/NATSBridge'); const sub = nc.subscribe("/device/command"); for await (const msg of sub) { - const envelope = await smartreceive(msg); + const env = await smartreceive(msg); // Process command - for (const payload of envelope.payloads) { + for (const payload of env.payloads) { if (payload.dataname === "command") { const command = payload.data; @@ -331,8 +331,8 @@ for await (const msg of sub) { await smartsend("/device/response", [ { dataname: "sensor_data", data: response, type: "dictionary" } ], { - reply_to: envelope.replyTo, - reply_to_msg_id: envelope.msgId + reply_to: env.replyTo, + reply_to_msg_id: env.msgId }); } } @@ -528,8 +528,8 @@ env, env_json_str = smartsend("/analysis/config", data, nats_url="nats://localho const { smartreceive } = require('./src/NATSBridge'); // Receive dictionary from Julia -const envelope = await smartreceive(msg); -for (const payload of envelope.payloads) { +const env = await smartreceive(msg); +for (const payload of env.payloads) { if (payload.type === "dictionary") { console.log("Received config:", payload.data); // payload.data = { step_size: 0.01, iterations: 1000 } @@ -554,8 +554,8 @@ const { env, env_json_str } = await smartsend("/data/transfer", [ ```python from nats_bridge import smartreceive -envelope = smartreceive(msg) -for dataname, data, type in envelope["payloads"]: +env = smartreceive(msg) +for dataname, data, type in env["payloads"]: if type == "text": print(f"Received from JS: {data}") ``` @@ -576,8 +576,8 @@ env, env_json_str = smartsend("/chat/python", data) ```julia using NATSBridge -envelope = smartreceive(msg, fileserverDownloadHandler) -for (dataname, data, type) in envelope["payloads"] +env = smartreceive(msg, fileserverDownloadHandler) +for (dataname, data, type) in env["payloads"] if type == "text" println("Received from Python: $data") end diff --git a/examples/walkthrough.md b/examples/walkthrough.md index be72fd2..b9f68fe 100644 --- a/examples/walkthrough.md +++ b/examples/walkthrough.md @@ -216,15 +216,15 @@ class ChatHandler { } async handleMessage(msg) { - const envelope = await smartreceive(msg, { + const env = await smartreceive(msg, { fileserverDownloadHandler: this.downloadFile.bind(this) }); // Extract sender info from envelope - const sender = envelope.senderName || 'Anonymous'; + const sender = env.senderName || 'Anonymous'; // Process each payload - for (const payload of envelope.payloads) { + for (const payload of env.payloads) { if (payload.type === 'text') { this.ui.addMessage(sender, payload.data); } else if (payload.type === 'image') { @@ -356,12 +356,12 @@ class FileDownloadService { async downloadFile(sender, downloadId) { // Subscribe to sender's file channel - const envelope = await smartreceive(msg, { + const env = await smartreceive(msg, { fileserverDownloadHandler: this.fetchFromUrl.bind(this) }); // Process each payload - for (const payload of envelope.payloads) { + for (const payload of env.payloads) { if (payload.type === 'binary') { const filePath = `/downloads/${payload.dataname}`; fs.writeFileSync(filePath, payload.data); @@ -422,9 +422,9 @@ async function uploadFile(config) { const fileService = new FileUploadService(config.nats_url, config.fileserver_url); try { - const envelope = await fileService.uploadFile(filePath, recipient); + const env = await fileService.uploadFile(filePath, recipient); console.log('Upload successful!'); - console.log(`File ID: ${envelope.payloads[0].id}`); + console.log(`File ID: ${env.payloads[0].id}`); } catch (error) { console.error('Upload failed:', error.message); } @@ -533,7 +533,7 @@ class SensorSender: data = [("reading", reading.to_dict(), "dictionary")] - # With is_publish=False, returns (envelope, json_str) without publishing + # With is_publish=False, returns (env, env_json_str) without publishing env, env_json_str = smartsend( f"/sensors/{sensor_id}/prepare", data, @@ -597,9 +597,9 @@ class SensorReceiver: self.fileserver_download_handler = fileserver_download_handler def process_reading(self, msg): - envelope = smartreceive(msg, self.fileserver_download_handler) + env = smartreceive(msg, self.fileserver_download_handler) - for dataname, data, data_type in envelope["payloads"]: + for dataname, data, data_type in env["payloads"]: if data_type == "dictionary": reading = SensorReading( sensor_id=data["sensor_id"], @@ -699,10 +699,10 @@ class DeviceBridge: # Poll for messages msg = self._poll_for_message() if msg: - envelope = smartreceive(msg) + env = smartreceive(msg) # Process payloads - for dataname, data, data_type in envelope["payloads"]: + for dataname, data, data_type in env["payloads"]: if dataname == "command": callback(data) @@ -798,9 +798,9 @@ class DashboardServer: def receive_selection(self, callback): def handler(msg): - envelope = smartreceive(msg) + env = smartreceive(msg) - for dataname, data, data_type in envelope["payloads"]: + for dataname, data, data_type in env["payloads"]: if data_type == "dictionary": callback(data) @@ -842,12 +842,12 @@ class DashboardUI { async fetchData() { // Subscribe to data updates - const envelope = await smartreceive(msg, { + const env = await smartreceive(msg, { fileserverDownloadHandler: this.fetchFromUrl.bind(this) }); // Process table data - for (const payload of envelope.payloads) { + for (const payload of env.payloads) { if (payload.type === 'table') { // Deserialize Arrow IPC this.data = this.deserializeArrow(payload.data);