@push.rocks/smartsocket
Version:
Provides easy and secure websocket communication mechanisms, including server and client implementation, function call routing, connection management, and tagging.
82 lines • 6.77 kB
JavaScript
import * as plugins from './smartsocket.plugins.js';
import * as interfaces from './interfaces/index.js';
// import interfaces
import { SocketFunction, } from './smartsocket.classes.socketfunction.js';
// import classes
import { SocketConnection } from './smartsocket.classes.socketconnection.js';
import { logger } from './smartsocket.logging.js';
import { Smartsocket } from './smartsocket.classes.smartsocket.js';
import { SmartsocketClient } from './smartsocket.classes.smartsocketclient.js';
// export classes
export class SocketRequest {
// STATIC
static getSocketRequestById(smartsocketRef, shortIdArg) {
return smartsocketRef.socketRequests.findSync((socketRequestArg) => {
return socketRequestArg.shortid === shortIdArg;
});
}
constructor(smartsocketRefArg, optionsArg) {
// INSTANCE
this.status = 'new';
this.done = plugins.smartpromise.defer();
this.smartsocketRef = smartsocketRefArg;
this.side = optionsArg.side;
this.shortid = optionsArg.shortId;
this.funcCallData = optionsArg.funcCallData;
this.originSocketConnection = optionsArg.originSocketConnection;
this.smartsocketRef.socketRequests.add(this);
}
// requesting --------------------------
/**
* dispatches a socketrequest from the requesting to the receiving side
*/
dispatch() {
const message = {
type: 'function',
id: this.shortid,
payload: {
funcName: this.funcCallData.funcName,
funcData: this.funcCallData.funcDataArg,
},
};
this.originSocketConnection.sendMessage(message);
return this.done.promise;
}
/**
* handles the response that is received by the requesting side
*/
async handleResponse(responseDataArg) {
this.done.resolve(responseDataArg.funcCallData);
this.smartsocketRef.socketRequests.remove(this);
}
// responding --------------------------
/**
* creates the response on the responding side
*/
async createResponse() {
const targetSocketFunction = SocketFunction.getSocketFunctionByName(this.smartsocketRef, this.funcCallData.funcName);
if (!targetSocketFunction) {
logger.log('error', `There is no SocketFunction defined for ${this.funcCallData.funcName}`);
return;
}
targetSocketFunction
.invoke(this.funcCallData, this.originSocketConnection)
.then((resultData) => {
const message = {
type: 'functionResponse',
id: this.shortid,
payload: {
funcName: resultData.funcName,
funcData: resultData.funcDataArg,
},
};
this.originSocketConnection.sendMessage(message);
this.smartsocketRef.socketRequests.remove(this);
})
.catch((error) => {
logger.log('error', `Function invocation failed for ${this.funcCallData.funcName}: ${error instanceof Error ? error.message : String(error)}`);
this.smartsocketRef.socketRequests.remove(this);
});
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuY2xhc3Nlcy5zb2NrZXRyZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRzb2NrZXQuY2xhc3Nlcy5zb2NrZXRyZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sMEJBQTBCLENBQUM7QUFDcEQsT0FBTyxLQUFLLFVBQVUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxvQkFBb0I7QUFDcEIsT0FBTyxFQUNMLGNBQWMsR0FHZixNQUFNLHlDQUF5QyxDQUFDO0FBRWpELGlCQUFpQjtBQUNqQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBMkIvRSxpQkFBaUI7QUFDakIsTUFBTSxPQUFPLGFBQWE7SUFDeEIsU0FBUztJQUNGLE1BQU0sQ0FBQyxvQkFBb0IsQ0FDaEMsY0FBK0MsRUFDL0MsVUFBa0I7UUFFbEIsT0FBTyxjQUFjLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUU7WUFDakUsT0FBTyxnQkFBZ0IsQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQVlELFlBQ0UsaUJBQWtELEVBQ2xELFVBQStDO1FBWmpELFdBQVc7UUFDSixXQUFNLEdBQXlCLEtBQUssQ0FBQztRQUtyQyxTQUFJLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQXNDLENBQUM7UUFRN0UsSUFBSSxDQUFDLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQztRQUN4QyxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJ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