Refactor smartsocket implementation for improved WebSocket handling and message protocol

- Updated test files to use new testing library and reduced test cycles for efficiency.
- Removed dependency on smartexpress and integrated direct WebSocket handling.
- Enhanced Smartsocket and SmartsocketClient classes to support new message types and authentication flow.
- Implemented a new message interface for structured communication between client and server.
- Added external server support for smartserve with appropriate WebSocket hooks.
- Improved connection management and error handling in SocketConnection and SocketRequest classes.
- Cleaned up code and removed deprecated socket.io references in favor of native WebSocket.
This commit is contained in:
2025-12-03 02:20:38 +00:00
parent ee59471e14
commit 1d62c9c695
14 changed files with 3901 additions and 3007 deletions

View File

@@ -1,4 +1,5 @@
import * as plugins from './smartsocket.plugins.js';
import * as interfaces from './interfaces/index.js';
// import interfaces
import {
@@ -78,11 +79,15 @@ export class SocketRequest<T extends plugins.typedrequestInterfaces.ITypedReques
* dispatches a socketrequest from the requesting to the receiving side
*/
public dispatch(): Promise<ISocketFunctionCallDataResponse<T>> {
const requestData: ISocketRequestDataObject<T> = {
funcCallData: this.funcCallData,
shortId: this.shortid,
const message: interfaces.ISocketMessage<interfaces.IFunctionCallPayload> = {
type: 'function',
id: this.shortid,
payload: {
funcName: this.funcCallData.funcName,
funcData: this.funcCallData.funcDataArg,
},
};
this.originSocketConnection.socket.emit('function', requestData);
this.originSocketConnection.sendMessage(message);
return this.done.promise;
}
@@ -90,7 +95,6 @@ export class SocketRequest<T extends plugins.typedrequestInterfaces.ITypedReques
* handles the response that is received by the requesting side
*/
public async handleResponse(responseDataArg: ISocketRequestDataObject<T>) {
// logger.log('info', 'handling response!');
this.done.resolve(responseDataArg.funcCallData);
this.smartsocketRef.socketRequests.remove(this);
}
@@ -110,16 +114,19 @@ export class SocketRequest<T extends plugins.typedrequestInterfaces.ITypedReques
logger.log('error', `There is no SocketFunction defined for ${this.funcCallData.funcName}`);
return;
}
// logger.log('info', `invoking ${targetSocketFunction.name}`);
targetSocketFunction
.invoke(this.funcCallData, this.originSocketConnection)
.then((resultData) => {
// logger.log('info', 'got resultData. Sending it to requesting party.');
const responseData: ISocketRequestDataObject<T> = {
funcCallData: resultData,
shortId: this.shortid,
const message: interfaces.ISocketMessage<interfaces.IFunctionCallPayload> = {
type: 'functionResponse',
id: this.shortid,
payload: {
funcName: resultData.funcName,
funcData: resultData.funcDataArg,
},
};
this.originSocketConnection.socket.emit('functionResponse', responseData);
this.originSocketConnection.sendMessage(message);
this.smartsocketRef.socketRequests.remove(this);
});
}