modbus-connect
Version:
Modbus RTU over Web Serial and Node.js SerialPort
69 lines (62 loc) • 2.34 kB
JavaScript
// transport/factory.js
// @ts-nocheck
const logger = require('../logger.js');
async function createTransport(type, options = {}) {
logger.setTransportType(type);
try {
switch (type) {
// Creating a Transport for the Node.js Environment
case 'node': {
const path = options.port || options.path;
if (!path) {
throw new Error('Missing "port" (or "path") option for node transport');
}
const { NodeSerialTransport } = require('./node-transports/node-serialport.js');
const rest = { ...options };
delete rest.port;
delete rest.path;
return new NodeSerialTransport(path, rest);
}
// Creating a TCP Transport for the Node Environment
case 'node-tcp': {
const { NodeTcpSerialTransport } = require('./node-transports/node-tcp-serialport.js');
const host = options.host;
if (!host) {
throw new Error('Missing "host" option for tcp transport');
}
const rest = { ...options };
delete rest.host;
return new NodeTcpSerialTransport(host, rest);
}
// Creating a Transport for the Web Environment
case 'web': {
if (!options.port) {
throw new Error('Missing "port" option for web transport');
}
const { WebSerialTransport } = require('./web-transports/web-serialport.js');
const portInstance = options.port;
const rest = { ...options };
delete rest.port;
return new WebSerialTransport(portInstance, rest);
}
// Creating a Transport for the Web Environment
case 'web-tcp': {
const { WebTcpSerialTransport } = require('./web-transports/web-tcp-serialport.js');
const host = options.host;
if (!host) {
throw new Error('Missing "host" option for tcp transport');
}
const rest = { ...options };
delete rest.host;
return new WebTcpSerialTransport(host, rest);
}
// Unknown or unsupported type
default:
throw new Error(`Unknown transport type: ${type}`);
}
} catch (err) {
logger.error(`Failed to create transport of type "${type}": ${err.message}`);
throw err;
}
}
module.exports = { createTransport }