modbus-connect
Version:
Modbus RTU over Web Serial and Node.js SerialPort
59 lines (52 loc) • 1.84 kB
JavaScript
// transport/factory.js
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 } = await import('./node-serialport.js');
const rest = { ...options };
delete rest.port;
delete rest.path;
return new NodeSerialTransport(path, rest);
}
// Creating a Transport for the Web Environment
case 'web': {
if (!options.port) {
throw new Error('Missing "port" option for web transport');
}
const { WebSerialTransport } = await import('./web-serialport.js');
const portInstance = options.port;
const rest = { ...options };
delete rest.port;
return new WebSerialTransport(portInstance, rest);
}
// Creating a TCP Transport for the Node Environment
case 'tcp': {
const { TcpSerialTransport } = await import('./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 TcpSerialTransport(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
}