fix(core): update

This commit is contained in:
Philipp Kunz 2020-09-24 18:03:01 +00:00
parent 424d9cca91
commit 1fbc76ef30
34 changed files with 10256 additions and 1074 deletions

5
dist_ts/index.d.ts vendored Normal file
View File

@ -0,0 +1,5 @@
export * from './smartsocket.classes.smartsocket';
export * from './smartsocket.classes.smartsocketclient';
export * from './smartsocket.classes.socketfunction';
export * from './smartsocket.classes.socketrole';
export * from './smartsocket.classes.socketconnection';

20
dist_ts/index.js Normal file
View File

@ -0,0 +1,20 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
// export main classes
__exportStar(require("./smartsocket.classes.smartsocket"), exports);
__exportStar(require("./smartsocket.classes.smartsocketclient"), exports);
// export further classes and objects
__exportStar(require("./smartsocket.classes.socketfunction"), exports);
__exportStar(require("./smartsocket.classes.socketrole"), exports);
__exportStar(require("./smartsocket.classes.socketconnection"), exports);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxzQkFBc0I7QUFDdEIsb0VBQWtEO0FBQ2xELDBFQUF3RDtBQUV4RCxxQ0FBcUM7QUFDckMsdUVBQXFEO0FBQ3JELG1FQUFpRDtBQUNqRCx5RUFBdUQifQ==

4
dist_ts/interfaces/connection.d.ts vendored Normal file
View File

@ -0,0 +1,4 @@
export interface IRequestAuthPayload {
serverShortId: string;
}
export declare type TConnectionStatus = 'new' | 'connecting' | 'connected' | 'disconnecting' | 'disconnected';

View File

@ -0,0 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2ludGVyZmFjZXMvY29ubmVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=

1
dist_ts/interfaces/index.d.ts vendored Normal file
View File

@ -0,0 +1 @@
export * from './connection';

View File

@ -0,0 +1,14 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require("./connection"), exports);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLCtDQUE2QiJ9

View File

@ -0,0 +1,45 @@
import * as plugins from './smartsocket.plugins';
import { SocketConnection } from './smartsocket.classes.socketconnection';
import { SocketFunction } from './smartsocket.classes.socketfunction';
import { SocketRequest } from './smartsocket.classes.socketrequest';
import { SocketRole } from './smartsocket.classes.socketrole';
import * as SocketIO from 'socket.io';
export interface ISmartsocketConstructorOptions {
port?: number;
}
export declare class Smartsocket {
/**
* a unique id to detect server restarts
*/
shortId: string;
options: ISmartsocketConstructorOptions;
io: SocketIO.Server;
socketConnections: plugins.lik.ObjectMap<SocketConnection>;
socketRoles: plugins.lik.ObjectMap<SocketRole>;
socketFunctions: plugins.lik.ObjectMap<SocketFunction<any>>;
socketRequests: plugins.lik.ObjectMap<SocketRequest<any>>;
private socketServer;
constructor(optionsArg: ISmartsocketConstructorOptions);
setExternalServer(serverType: 'smartexpress', serverArg: any): Promise<void>;
/**
* starts smartsocket
*/
start(): Promise<void>;
/**
* stops smartsocket
*/
stop(): Promise<void>;
/**
* allows call to specific client.
*/
clientCall<T extends plugins.typedrequestInterfaces.ITypedRequest>(functionNameArg: T['method'], dataArg: T['request'], targetSocketConnectionArg: SocketConnection): Promise<T['response']>;
/**
* adds socketRoles
*/
addSocketRoles(socketRolesArray: SocketRole[]): void;
addSocketFunction(socketFunction: SocketFunction<any>): void;
/**
* the standard handler for new socket connections
*/
private _handleSocketConnection;
}

View File

@ -0,0 +1,119 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Smartsocket = void 0;
const plugins = __importStar(require("./smartsocket.plugins"));
// classes
const smartsocket_classes_socketconnection_1 = require("./smartsocket.classes.socketconnection");
const smartsocket_classes_socketrequest_1 = require("./smartsocket.classes.socketrequest");
const smartsocket_classes_socketserver_1 = require("./smartsocket.classes.socketserver");
const smartsocket_logging_1 = require("./smartsocket.logging");
class Smartsocket {
constructor(optionsArg) {
/**
* a unique id to detect server restarts
*/
this.shortId = plugins.smartunique.shortId();
this.socketConnections = new plugins.lik.ObjectMap();
this.socketRoles = new plugins.lik.ObjectMap();
this.socketFunctions = new plugins.lik.ObjectMap();
this.socketRequests = new plugins.lik.ObjectMap();
this.socketServer = new smartsocket_classes_socketserver_1.SocketServer(this);
this.options = optionsArg;
}
// tslint:disable-next-line:member-ordering
async setExternalServer(serverType, serverArg) {
await this.socketServer.setExternalServer(serverType, serverArg);
}
/**
* starts smartsocket
*/
async start() {
this.io = plugins.socketIo(this.socketServer.getServerForSocketIo());
await this.socketServer.start();
this.io.on('connection', socketArg => {
this._handleSocketConnection(socketArg);
});
}
/**
* stops smartsocket
*/
async stop() {
await plugins.smartdelay.delayFor(1000);
this.socketConnections.forEach((socketObjectArg) => {
smartsocket_logging_1.logger.log('info', `disconnect socket with >>alias ${socketObjectArg.alias}`);
socketObjectArg.socket.disconnect();
});
this.socketConnections.wipe();
this.io.close();
// stop the corresponging server
this.socketServer.stop();
}
// communication
/**
* allows call to specific client.
*/
async clientCall(functionNameArg, dataArg, targetSocketConnectionArg) {
const socketRequest = new smartsocket_classes_socketrequest_1.SocketRequest(this, {
funcCallData: {
funcDataArg: dataArg,
funcName: functionNameArg
},
originSocketConnection: targetSocketConnectionArg,
shortId: plugins.smartunique.shortId(),
side: 'requesting'
});
const response = await socketRequest.dispatch();
const result = response.funcDataArg;
return result;
}
/**
* adds socketRoles
*/
addSocketRoles(socketRolesArray) {
for (const socketRole of socketRolesArray) {
this.socketRoles.add(socketRole);
}
return;
}
addSocketFunction(socketFunction) {
this.socketFunctions.add(socketFunction);
}
/**
* the standard handler for new socket connections
*/
async _handleSocketConnection(socketArg) {
const socketConnection = new smartsocket_classes_socketconnection_1.SocketConnection({
alias: undefined,
authenticated: false,
role: undefined,
side: 'server',
smartsocketHost: this,
socket: socketArg
});
smartsocket_logging_1.logger.log('info', 'Socket connected. Trying to authenticate...');
this.socketConnections.add(socketConnection);
await socketConnection.authenticate();
await socketConnection.listenToFunctionRequests();
}
}
exports.Smartsocket = Smartsocket;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuY2xhc3Nlcy5zbWFydHNvY2tldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LmNsYXNzZXMuc21hcnRzb2NrZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtEQUFpRDtBQUVqRCxVQUFVO0FBQ1YsaUdBQTBFO0FBRTFFLDJGQUFvRTtBQUVwRSx5RkFBa0U7QUFJbEUsK0RBQStDO0FBTS9DLE1BQWEsV0FBVztJQWN0QixZQUFZLFVBQTBDO1FBYnREOztXQUVHO1FBQ0ksWUFBTyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7UUFHeEMsc0JBQWlCLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBb0IsQ0FBQztRQUNsRSxnQkFBVyxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQWMsQ0FBQztRQUN0RCxvQkFBZSxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQXVCLENBQUM7UUFDbkUsbUJBQWMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFzQixDQUFDO1FBRWhFLGlCQUFZLEdBQUcsSUFBSSwrQ0FBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRzVDLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDO0lBQzVCLENBQUM7SUFFRCwyQ0FBMkM7SUFDcEMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFVBQTBCLEVBQUUsU0FBYztRQUN2RSxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUNyRSxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQ25DLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxJQUFJO1FBQ2YsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBaUMsRUFBRSxFQUFFO1lBQ25FLDRCQUFNLENBQUMsR0FBRyxDQUNSLE1BQU0sRUFDTixrQ0FBa0MsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUMxRCxDQUFDO1lBQ0YsZUFBZSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRWhCLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxnQkFBZ0I7SUFFaEI7O09BRUc7SUFDSSxLQUFLLENBQUMsVUFBVSxDQUNyQixlQUE0QixFQUM1QixPQUFxQixFQUNyQix5QkFBMkM7UUFFM0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxpREFBYSxDQUFJLElBQUksRUFBRTtZQUMvQyxZQUFZLEVBQUU7Z0JBQ1osV0FBVyxFQUFFLE9BQU87Z0JBQ3BCLFFBQVEsRUFBRSxlQUFlO2FBQzFCO1lBQ0Qsc0JBQXNCLEVBQUUseUJBQXlCO1lBQ2pELE9BQU8sRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRTtZQUN0QyxJQUFJLEVBQUUsWUFBWTtTQUNuQixDQUFDLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBdUMsTUFBTSxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEYsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUNwQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjLENBQUMsZ0JBQThCO1FBQ2xELEtBQUssTUFBTSxVQUFVLElBQUksZ0JBQWdCLEVBQUU7WUFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDbEM7UUFDRCxPQUFPO0lBQ1QsQ0FBQztJQUVNLGlCQUFpQixDQUFDLGNBQW1DO1FBQzFELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxTQUFrQztRQUN0RSxNQUFNLGdCQUFnQixHQUFxQixJQUFJLHVEQUFnQixDQUFDO1lBQzlELEtBQUssRUFBRSxTQUFTO1lBQ2hCLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLElBQUksRUFBRSxTQUFTO1lBQ2YsSUFBSSxFQUFFLFFBQVE7WUFDZCxlQUFlLEVBQUUsSUFBSTtZQUNyQixNQUFNLEVBQUUsU0FBUztTQUNsQixDQUFDLENBQUM7UUFDSCw0QkFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsNkNBQTZDLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDN0MsTUFBTSxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QyxNQUFNLGdCQUFnQixDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDcEQsQ0FBQztDQUNGO0FBNUdELGtDQTRHQyJ9

View File

@ -0,0 +1,53 @@
import * as plugins from './smartsocket.plugins';
import * as interfaces from './interfaces';
import { SocketConnection } from './smartsocket.classes.socketconnection';
import { SocketFunction } from './smartsocket.classes.socketfunction';
import { SocketRequest } from './smartsocket.classes.socketrequest';
import { SocketRole } from './smartsocket.classes.socketrole';
/**
* interface for class SmartsocketClient
*/
export interface ISmartsocketClientOptions {
port: number;
url: string;
alias: string;
role: string;
password: string;
autoReconnect?: boolean;
}
export declare class SmartsocketClient {
shortId: string;
remoteShortId: string;
alias: string;
socketRole: SocketRole;
socketConnection: SocketConnection;
serverUrl: string;
serverPort: number;
autoReconnect: boolean;
eventSubject: plugins.smartrx.rxjs.Subject<interfaces.TConnectionStatus>;
eventStatus: interfaces.TConnectionStatus;
socketFunctions: plugins.lik.ObjectMap<SocketFunction<any>>;
socketRequests: plugins.lik.ObjectMap<SocketRequest<any>>;
socketRoles: plugins.lik.ObjectMap<SocketRole>;
constructor(optionsArg: ISmartsocketClientOptions);
addSocketFunction(socketFunction: SocketFunction<any>): void;
/**
* connect the client to the server
*/
connect(): Promise<unknown>;
/**
* disconnect from the server
*/
disconnect(): Promise<void>;
/**
* try a reconnection
*/
tryDebouncedReconnect(): Promise<void>;
/**
* dispatches a server call
* @param functionNameArg
* @param dataArg
*/
serverCall<T extends plugins.typedrequestInterfaces.ITypedRequest>(functionNameArg: T['method'], dataArg: T['request']): Promise<T['response']>;
private updateStatus;
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,55 @@
/// <reference types="socket.io-client" />
import * as plugins from './smartsocket.plugins';
import * as interfaces from './interfaces';
import { Smartsocket } from './smartsocket.classes.smartsocket';
import { SocketRole } from './smartsocket.classes.socketrole';
import * as SocketIO from 'socket.io';
import { SmartsocketClient } from './smartsocket.classes.smartsocketclient';
/**
* defines is a SocketConnection is server or client side. Important for mesh setups.
*/
export declare type TSocketConnectionSide = 'server' | 'client';
/**
* interface for constructor of class SocketConnection
*/
export interface ISocketConnectionConstructorOptions {
alias: string;
authenticated: boolean;
role: SocketRole;
side: TSocketConnectionSide;
smartsocketHost: Smartsocket | SmartsocketClient;
socket: SocketIO.Socket | SocketIOClient.Socket;
}
/**
* interface for authentication data
*/
export interface ISocketConnectionAuthenticationObject {
role: 'coreflowContainer';
password: 'somePassword';
alias: 'coreflow1';
}
export declare let allSocketConnections: plugins.lik.ObjectMap<SocketConnection>;
/**
* class SocketConnection represents a websocket connection
*/
export declare class SocketConnection {
alias: string;
side: TSocketConnectionSide;
authenticated: boolean;
role: SocketRole;
smartsocketRef: Smartsocket | SmartsocketClient;
socket: SocketIO.Socket | SocketIOClient.Socket;
eventSubject: plugins.smartrx.rxjs.Subject<interfaces.TConnectionStatus>;
eventStatus: interfaces.TConnectionStatus;
constructor(optionsArg: ISocketConnectionConstructorOptions);
/**
* authenticate the socket
*/
authenticate(): Promise<unknown>;
/**
* listen to function requests
*/
listenToFunctionRequests(): Promise<unknown>;
disconnect(): Promise<void>;
private updateStatus;
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,52 @@
import * as plugins from './smartsocket.plugins';
import { SocketRole } from './smartsocket.classes.socketrole';
import { SocketConnection } from './smartsocket.classes.socketconnection';
import { Smartsocket } from './smartsocket.classes.smartsocket';
import { SmartsocketClient } from './smartsocket.classes.smartsocketclient';
/**
* interface of the contructor options of class SocketFunction
*/
export interface ISocketFunctionConstructorOptions<T extends plugins.typedrequestInterfaces.ITypedRequest> {
funcName: T['method'];
funcDef: TFuncDef<T>;
allowedRoles: SocketRole[];
}
/**
* interface of the Socket Function call, in other words the object that routes a call to a function
*/
export interface ISocketFunctionCallDataRequest<T extends plugins.typedrequestInterfaces.ITypedRequest> {
funcName: T['method'];
funcDataArg: T['request'];
}
/**
* interface of the Socket Function call, in other words the object that routes a call to a function
*/
export interface ISocketFunctionCallDataResponse<T extends plugins.typedrequestInterfaces.ITypedRequest> {
funcName: T['method'];
funcDataArg: T['response'];
}
/**
* interface for function definition of SocketFunction
*/
export declare type TFuncDef<T extends plugins.typedrequestInterfaces.ITypedRequest> = (dataArg: T['request'], connectionArg: SocketConnection) => PromiseLike<T['response']>;
/**
* class that respresents a function that can be transparently called using a SocketConnection
*/
export declare class SocketFunction<T extends plugins.typedrequestInterfaces.ITypedRequest> {
static getSocketFunctionByName<Q extends plugins.typedrequestInterfaces.ITypedRequest>(smartsocketRefArg: Smartsocket | SmartsocketClient, functionNameArg: string): SocketFunction<Q>;
name: string;
funcDef: TFuncDef<T>;
roles: SocketRole[];
/**
* the constructor for SocketFunction
*/
constructor(optionsArg: ISocketFunctionConstructorOptions<T>);
/**
* invokes the function of this SocketFunction
*/
invoke(dataArg: ISocketFunctionCallDataRequest<T>, socketConnectionArg: SocketConnection): Promise<ISocketFunctionCallDataResponse<T>>;
/**
* notifies a role about access to this SocketFunction
*/
private _notifyRole;
}

View File

@ -0,0 +1,49 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SocketFunction = void 0;
// export classes
/**
* class that respresents a function that can be transparently called using a SocketConnection
*/
class SocketFunction {
/**
* the constructor for SocketFunction
*/
constructor(optionsArg) {
this.name = optionsArg.funcName;
this.funcDef = optionsArg.funcDef;
this.roles = optionsArg.allowedRoles;
for (const socketRoleArg of this.roles) {
this._notifyRole(socketRoleArg);
}
}
// STATIC
static getSocketFunctionByName(smartsocketRefArg, functionNameArg) {
return smartsocketRefArg.socketFunctions.find(socketFunctionArg => {
return socketFunctionArg.name === functionNameArg;
});
}
/**
* invokes the function of this SocketFunction
*/
async invoke(dataArg, socketConnectionArg) {
if (dataArg.funcName === this.name) {
const funcResponseData = {
funcName: this.name,
funcDataArg: await this.funcDef(dataArg.funcDataArg, socketConnectionArg)
};
return funcResponseData;
}
else {
throw new Error("SocketFunction.name does not match the data argument's .name!");
}
}
/**
* notifies a role about access to this SocketFunction
*/
_notifyRole(socketRoleArg) {
socketRoleArg.addSocketFunction(this);
}
}
exports.SocketFunction = SocketFunction;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuY2xhc3Nlcy5zb2NrZXRmdW5jdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LmNsYXNzZXMuc29ja2V0ZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBd0NBLGlCQUFpQjtBQUVqQjs7R0FFRztBQUNILE1BQWEsY0FBYztJQWdCekI7O09BRUc7SUFDSCxZQUFZLFVBQWdEO1FBQzFELElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFDbEMsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO1FBQ3JDLEtBQUssTUFBTSxhQUFhLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQXpCRCxTQUFTO0lBQ0YsTUFBTSxDQUFDLHVCQUF1QixDQUNuQyxpQkFBa0QsRUFDbEQsZUFBdUI7UUFFdkIsT0FBTyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7WUFDaEUsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQW1CRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBMEMsRUFBRSxtQkFBcUM7UUFDbkcsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDbEMsTUFBTSxnQkFBZ0IsR0FBdUM7Z0JBQzNELFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDbkIsV0FBVyxFQUFFLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLG1CQUFtQixDQUFDO2FBQzFFLENBQUM7WUFDRixPQUFPLGdCQUFnQixDQUFDO1NBQ3pCO2FBQU07WUFDTCxNQUFNLElBQUksS0FBSyxDQUFDLCtEQUErRCxDQUFDLENBQUM7U0FDbEY7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxXQUFXLENBQUMsYUFBeUI7UUFDM0MsYUFBYSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDRjtBQWpERCx3Q0FpREMifQ==

View File

@ -0,0 +1,47 @@
import * as plugins from './smartsocket.plugins';
import { ISocketFunctionCallDataRequest, ISocketFunctionCallDataResponse } from './smartsocket.classes.socketfunction';
import { SocketConnection } from './smartsocket.classes.socketconnection';
import { Smartsocket } from './smartsocket.classes.smartsocket';
import { SmartsocketClient } from './smartsocket.classes.smartsocketclient';
export declare type TSocketRequestStatus = 'new' | 'pending' | 'finished';
export declare type TSocketRequestSide = 'requesting' | 'responding';
/**
* interface of constructor of class SocketRequest
*/
export interface ISocketRequestConstructorOptions<T extends plugins.typedrequestInterfaces.ITypedRequest> {
side: TSocketRequestSide;
originSocketConnection: SocketConnection;
shortId: string;
funcCallData?: ISocketFunctionCallDataRequest<T>;
}
/**
* request object that is sent initially and may or may not receive a response
*/
export interface ISocketRequestDataObject<T extends plugins.typedrequestInterfaces.ITypedRequest> {
funcCallData: ISocketFunctionCallDataRequest<T> | ISocketFunctionCallDataResponse<T>;
shortId: string;
responseTimeout?: number;
}
export declare class SocketRequest<T extends plugins.typedrequestInterfaces.ITypedRequest> {
static getSocketRequestById(smartsocketRef: Smartsocket | SmartsocketClient, shortIdArg: string): SocketRequest<any>;
status: TSocketRequestStatus;
side: TSocketRequestSide;
shortid: string;
originSocketConnection: SocketConnection;
funcCallData: ISocketFunctionCallDataRequest<T>;
done: plugins.smartpromise.Deferred<ISocketFunctionCallDataResponse<T>>;
smartsocketRef: Smartsocket | SmartsocketClient;
constructor(smartsocketRefArg: Smartsocket | SmartsocketClient, optionsArg: ISocketRequestConstructorOptions<T>);
/**
* dispatches a socketrequest from the requesting to the receiving side
*/
dispatch(): Promise<ISocketFunctionCallDataResponse<T>>;
/**
* handles the response that is received by the requesting side
*/
handleResponse(responseDataArg: ISocketRequestDataObject<T>): Promise<void>;
/**
* creates the response on the responding side
*/
createResponse(): Promise<void>;
}

View File

@ -0,0 +1,90 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SocketRequest = void 0;
const plugins = __importStar(require("./smartsocket.plugins"));
// import interfaces
const smartsocket_classes_socketfunction_1 = require("./smartsocket.classes.socketfunction");
const smartsocket_logging_1 = require("./smartsocket.logging");
// export classes
class SocketRequest {
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);
}
// STATIC
static getSocketRequestById(smartsocketRef, shortIdArg) {
return smartsocketRef.socketRequests.find(socketRequestArg => {
return socketRequestArg.shortid === shortIdArg;
});
}
// requesting --------------------------
/**
* dispatches a socketrequest from the requesting to the receiving side
*/
dispatch() {
const requestData = {
funcCallData: this.funcCallData,
shortId: this.shortid
};
this.originSocketConnection.socket.emit('function', requestData);
return this.done.promise;
}
/**
* handles the response that is received by the requesting side
*/
async handleResponse(responseDataArg) {
smartsocket_logging_1.logger.log('info', 'handling response!');
this.done.resolve(responseDataArg.funcCallData);
this.smartsocketRef.socketRequests.remove(this);
}
// responding --------------------------
/**
* creates the response on the responding side
*/
async createResponse() {
const targetSocketFunction = smartsocket_classes_socketfunction_1.SocketFunction.getSocketFunctionByName(this.smartsocketRef, this.funcCallData.funcName);
if (!targetSocketFunction) {
smartsocket_logging_1.logger.log('warn', `There is no SocketFunction defined for ${this.funcCallData.funcName}`);
smartsocket_logging_1.logger.log('warn', `So now response is being sent.`);
return;
}
smartsocket_logging_1.logger.log('info', `invoking ${targetSocketFunction.name}`);
targetSocketFunction.invoke(this.funcCallData, this.originSocketConnection).then(resultData => {
smartsocket_logging_1.logger.log('info', 'got resultData. Sending it to requesting party.');
const responseData = {
funcCallData: resultData,
shortId: this.shortid
};
this.originSocketConnection.socket.emit('functionResponse', responseData);
this.smartsocketRef.socketRequests.remove(this);
});
}
}
exports.SocketRequest = SocketRequest;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuY2xhc3Nlcy5zb2NrZXRyZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRzb2NrZXQuY2xhc3Nlcy5zb2NrZXRyZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrREFBaUQ7QUFFakQsb0JBQW9CO0FBQ3BCLDZGQUF1STtBQUl2SSwrREFBK0M7QUEyQi9DLGlCQUFpQjtBQUNqQixNQUFhLGFBQWE7SUFxQnhCLFlBQ0UsaUJBQWtELEVBQ2xELFVBQStDO1FBWmpELFdBQVc7UUFDSixXQUFNLEdBQXlCLEtBQUssQ0FBQztRQUtyQyxTQUFJLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQXNDLENBQUM7UUFRN0UsSUFBSSxDQUFDLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQztRQUN4QyxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQztRQUM1QyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsVUFBVSxDQUFDLHNCQUFzQixDQUFDO1FBQ2hFLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBOUJELFNBQVM7SUFDRixNQUFNLENBQUMsb0JBQW9CLENBQ2hDLGNBQStDLEVBQy9DLFVBQWtCO1FBRWxCLE9BQU8sY0FBYyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtZQUMzRCxPQUFPLGdCQUFnQixDQUFDLE9BQU8sS0FBSyxVQUFVLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBd0JELHdDQUF3QztJQUV4Qzs7T0FFRztJQUNJLFFBQVE7UUFDYixNQUFNLFdBQVcsR0FBZ0M7WUFDL0MsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQy9CLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztTQUN0QixDQUFDO1FBQ0YsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLGNBQWMsQ0FBQyxlQUE0QztRQUN0RSw0QkFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCx3Q0FBd0M7SUFFeEM7O09BRUc7SUFDSSxLQUFLLENBQUMsY0FBYztRQUN6QixNQUFNLG9CQUFvQixHQUFzQixtREFBYyxDQUFDLHVCQUF1QixDQUNwRixJQUFJLENBQUMsY0FBYyxFQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FDM0IsQ0FBQztRQUVGLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUN6Qiw0QkFBTSxDQUFDLEdBQUcsQ0FDUixNQUFNLEVBQ04sMENBQTBDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQ3ZFLENBQUM7WUFDRiw0QkFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztZQUNyRCxPQUFPO1NBQ1I7UUFDRCw0QkFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsWUFBWSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVELG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUM1Riw0QkFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsaURBQWlELENBQUMsQ0FBQztZQUN0RSxNQUFNLFlBQVksR0FBZ0M7Z0JBQ2hELFlBQVksRUFBRSxVQUFVO2dCQUN4QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87YUFDdEIsQ0FBQztZQUNGLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzFFLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXRGRCxzQ0FzRkMifQ==

View File

@ -0,0 +1,28 @@
import * as plugins from './smartsocket.plugins';
import { SocketFunction } from './smartsocket.classes.socketfunction';
import { Smartsocket } from './smartsocket.classes.smartsocket';
import { SmartsocketClient } from './smartsocket.classes.smartsocketclient';
import { ISocketConnectionAuthenticationObject } from './smartsocket.classes.socketconnection';
/**
* interface for class SocketRole
*/
export interface ISocketRoleOptions {
name: string;
passwordHash: string;
}
/**
* A socketrole defines access to certain routines.
*/
export declare class SocketRole {
static getSocketRoleByName(referenceSmartsocket: Smartsocket | SmartsocketClient, socketRoleNameArg: string): SocketRole;
static checkPasswordForRole(dataArg: ISocketConnectionAuthenticationObject, referenceSmartsocket: Smartsocket | SmartsocketClient): boolean;
name: string;
passwordHash: string;
allowedFunctions: plugins.lik.ObjectMap<SocketFunction<any>>;
constructor(optionsArg: ISocketRoleOptions);
/**
* adds the socketfunction to the socketrole
* @param socketFunctionArg
*/
addSocketFunction(socketFunctionArg: SocketFunction<any>): void;
}

View File

@ -0,0 +1,54 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SocketRole = void 0;
const plugins = __importStar(require("./smartsocket.plugins"));
/**
* A socketrole defines access to certain routines.
*/
class SocketRole {
constructor(optionsArg) {
this.allowedFunctions = new plugins.lik.ObjectMap();
this.name = optionsArg.name;
this.passwordHash = optionsArg.passwordHash;
}
// STATIC
static getSocketRoleByName(referenceSmartsocket, socketRoleNameArg) {
return referenceSmartsocket.socketRoles.find(socketRoleArg => {
return socketRoleArg.name === socketRoleNameArg;
});
}
static checkPasswordForRole(dataArg, referenceSmartsocket) {
const targetPasswordHash = SocketRole.getSocketRoleByName(referenceSmartsocket, dataArg.role)
.passwordHash;
const computedCompareHash = plugins.smarthash.sha256FromStringSync(dataArg.password);
return targetPasswordHash === computedCompareHash;
}
/**
* adds the socketfunction to the socketrole
* @param socketFunctionArg
*/
addSocketFunction(socketFunctionArg) {
this.allowedFunctions.add(socketFunctionArg);
}
}
exports.SocketRole = SocketRole;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuY2xhc3Nlcy5zb2NrZXRyb2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRzb2NrZXQuY2xhc3Nlcy5zb2NrZXRyb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrREFBaUQ7QUFnQmpEOztHQUVHO0FBQ0gsTUFBYSxVQUFVO0lBeUJyQixZQUFZLFVBQThCO1FBRG5DLHFCQUFnQixHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQXVCLENBQUM7UUFFekUsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQztJQUM5QyxDQUFDO0lBM0JELFNBQVM7SUFDRixNQUFNLENBQUMsbUJBQW1CLENBQy9CLG9CQUFxRCxFQUNyRCxpQkFBeUI7UUFFekIsT0FBTyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQzNELE9BQU8sYUFBYSxDQUFDLElBQUksS0FBSyxpQkFBaUIsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxNQUFNLENBQUMsb0JBQW9CLENBQ2hDLE9BQThDLEVBQzlDLG9CQUFxRDtRQUVyRCxNQUFNLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxvQkFBb0IsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDO2FBQzFGLFlBQVksQ0FBQztRQUNoQixNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JGLE9BQU8sa0JBQWtCLEtBQUssbUJBQW1CLENBQUM7SUFDcEQsQ0FBQztJQVdEOzs7T0FHRztJQUNJLGlCQUFpQixDQUFDLGlCQUFzQztRQUM3RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUNGO0FBckNELGdDQXFDQyJ9

View File

@ -0,0 +1,33 @@
/// <reference types="node" />
import * as plugins from './smartsocket.plugins';
import * as http from 'http';
import * as https from 'https';
import { Smartsocket } from './smartsocket.classes.smartsocket';
/**
* class socketServer
* handles the attachment of socketIo to whatever server is in play
*/
export declare class SocketServer {
private smartsocket;
private httpServer;
private standaloneServer;
private expressServer;
constructor(smartSocketInstance: Smartsocket);
/**
* starts the server with another server
* also works with an express style server
*/
setExternalServer(serverType: 'smartexpress', serverArg: plugins.smartexpress.Server): Promise<void>;
/**
* gets the server for socket.io
*/
getServerForSocketIo(): http.Server | https.Server;
/**
* starts listening to incoming sockets:
*/
start(): Promise<void>;
/**
* closes the server
*/
stop(): Promise<void>;
}

View File

@ -0,0 +1,88 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SocketServer = void 0;
const plugins = __importStar(require("./smartsocket.plugins"));
// used in case no other server is supplied
const http = __importStar(require("http"));
const smartsocket_logging_1 = require("./smartsocket.logging");
/**
* class socketServer
* handles the attachment of socketIo to whatever server is in play
*/
class SocketServer {
constructor(smartSocketInstance) {
// wether httpServer is standalone
this.standaloneServer = false;
this.smartsocket = smartSocketInstance;
}
/**
* starts the server with another server
* also works with an express style server
*/
async setExternalServer(serverType, serverArg) {
await serverArg.startedPromise;
this.httpServer = serverArg.httpServer;
}
/**
* gets the server for socket.io
*/
getServerForSocketIo() {
if (this.httpServer) {
return this.httpServer;
}
else {
this.httpServer = new http.Server();
this.standaloneServer = true;
return this.httpServer;
}
}
/**
* starts listening to incoming sockets:
*/
async start() {
const done = plugins.smartpromise.defer();
// handle http servers
// in case an external server has been set "this.standaloneServer" should be false
if (this.httpServer && this.standaloneServer) {
if (!this.smartsocket.options.port) {
smartsocket_logging_1.logger.log('error', 'there should be a port specifed for smartsocket!');
throw new Error('there should be a port specified for smartsocket');
}
this.httpServer.listen(this.smartsocket.options.port, () => {
smartsocket_logging_1.logger.log('success', `Server started in standalone mode on ${this.smartsocket.options.port}`);
done.resolve();
});
}
else {
done.resolve();
}
// nothing else to do if express server is set
await done.promise;
return;
}
/**
* closes the server
*/
async stop() { }
}
exports.SocketServer = SocketServer;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuY2xhc3Nlcy5zb2NrZXRzZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydHNvY2tldC5jbGFzc2VzLnNvY2tldHNlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0RBQWlEO0FBRWpELDJDQUEyQztBQUMzQywyQ0FBNkI7QUFHN0IsK0RBQStDO0FBRS9DOzs7R0FHRztBQUNILE1BQWEsWUFBWTtJQU92QixZQUFZLG1CQUFnQztRQUo1QyxrQ0FBa0M7UUFDMUIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBSS9CLElBQUksQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxpQkFBaUIsQ0FDNUIsVUFBMEIsRUFDMUIsU0FBc0M7UUFFdEMsTUFBTSxTQUFTLENBQUMsY0FBYyxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxvQkFBb0I7UUFDekIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUN4QjthQUFNO1lBQ0wsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQzdCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFMUMsc0JBQXNCO1FBQ3RCLGtGQUFrRjtRQUNsRixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7Z0JBQ2xDLDRCQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxrREFBa0QsQ0FBQyxDQUFDO2dCQUN4RSxNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7YUFDckU7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO2dCQUN6RCw0QkFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsd0NBQXdDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQy9GLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDaEI7UUFFRCw4Q0FBOEM7UUFDOUMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ25CLE9BQU87SUFDVCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsSUFBSSxLQUFJLENBQUM7Q0FDdkI7QUFsRUQsb0NBa0VDIn0=

2
dist_ts/smartsocket.logging.d.ts vendored Normal file
View File

@ -0,0 +1,2 @@
import * as plugins from './smartsocket.plugins';
export declare const logger: plugins.smartlog.ConsoleLog;

View File

@ -0,0 +1,25 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.logger = void 0;
const plugins = __importStar(require("./smartsocket.plugins"));
exports.logger = new plugins.smartlog.ConsoleLog();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQubG9nZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LmxvZ2dpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtEQUFpRDtBQUVwQyxRQUFBLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMifQ==

15
dist_ts/smartsocket.plugins.d.ts vendored Normal file
View File

@ -0,0 +1,15 @@
import * as typedrequestInterfaces from '@apiglobal/typedrequest-interfaces';
export { typedrequestInterfaces };
import * as lik from '@pushrocks/lik';
import * as smartlog from '@pushrocks/smartlog';
import * as smarthash from '@pushrocks/smarthash';
import * as smartdelay from '@pushrocks/smartdelay';
import * as smartexpress from '@pushrocks/smartexpress';
import * as smartpromise from '@pushrocks/smartpromise';
import * as smarttime from '@pushrocks/smarttime';
import * as smartunique from '@pushrocks/smartunique';
import * as smartrx from '@pushrocks/smartrx';
export { lik, smartlog, smarthash, smartdelay, smartexpress, smartpromise, smarttime, smartunique, smartrx };
import socketIo from 'socket.io';
import socketIoClient from 'socket.io-client';
export { socketIo, socketIoClient };

View File

@ -0,0 +1,53 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.socketIoClient = exports.socketIo = exports.smartrx = exports.smartunique = exports.smarttime = exports.smartpromise = exports.smartexpress = exports.smartdelay = exports.smarthash = exports.smartlog = exports.lik = exports.typedrequestInterfaces = void 0;
// apiglobal scope
const typedrequestInterfaces = __importStar(require("@apiglobal/typedrequest-interfaces"));
exports.typedrequestInterfaces = typedrequestInterfaces;
// pushrocks scope
const lik = __importStar(require("@pushrocks/lik"));
exports.lik = lik;
const smartlog = __importStar(require("@pushrocks/smartlog"));
exports.smartlog = smartlog;
const smarthash = __importStar(require("@pushrocks/smarthash"));
exports.smarthash = smarthash;
const smartdelay = __importStar(require("@pushrocks/smartdelay"));
exports.smartdelay = smartdelay;
const smartexpress = __importStar(require("@pushrocks/smartexpress"));
exports.smartexpress = smartexpress;
const smartpromise = __importStar(require("@pushrocks/smartpromise"));
exports.smartpromise = smartpromise;
const smarttime = __importStar(require("@pushrocks/smarttime"));
exports.smarttime = smarttime;
const smartunique = __importStar(require("@pushrocks/smartunique"));
exports.smartunique = smartunique;
const smartrx = __importStar(require("@pushrocks/smartrx"));
exports.smartrx = smartrx;
// third party scope
const socket_io_1 = __importDefault(require("socket.io"));
exports.socketIo = socket_io_1.default;
const socket_io_client_1 = __importDefault(require("socket.io-client"));
exports.socketIoClient = socket_io_client_1.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtCQUFrQjtBQUNsQiwyRkFBNkU7QUFFckUsd0RBQXNCO0FBRTlCLGtCQUFrQjtBQUNsQixvREFBc0M7QUFZcEMsa0JBQUc7QUFYTCw4REFBZ0Q7QUFZOUMsNEJBQVE7QUFYVixnRUFBa0Q7QUFZaEQsOEJBQVM7QUFYWCxrRUFBb0Q7QUFZbEQsZ0NBQVU7QUFYWixzRUFBd0Q7QUFZdEQsb0NBQVk7QUFYZCxzRUFBd0Q7QUFZdEQsb0NBQVk7QUFYZCxnRUFBa0Q7QUFZaEQsOEJBQVM7QUFYWCxvRUFBc0Q7QUFZcEQsa0NBQVc7QUFYYiw0REFBOEM7QUFZNUMsMEJBQU87QUFHVCxvQkFBb0I7QUFDcEIsMERBQWlDO0FBSS9CLG1CQUpLLG1CQUFRLENBSUw7QUFIVix3RUFBOEM7QUFJNUMseUJBSkssMEJBQWMsQ0FJTCJ9

10045
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -5,8 +5,8 @@
"main": "dist/index.js", "main": "dist/index.js",
"typings": "dist/index.d.ts", "typings": "dist/index.d.ts",
"scripts": { "scripts": {
"test": "tstest test/", "test": "(tstest test/)",
"build": "tsbuild" "build": "(tsbuild --web)"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@ -19,27 +19,27 @@
}, },
"homepage": "https://gitlab.com/pushrocks/smartsocket#README", "homepage": "https://gitlab.com/pushrocks/smartsocket#README",
"dependencies": { "dependencies": {
"@apiglobal/typedrequest-interfaces": "^1.0.7", "@apiglobal/typedrequest-interfaces": "^1.0.15",
"@pushrocks/lik": "^3.0.11", "@pushrocks/lik": "^4.0.17",
"@pushrocks/smartdelay": "^2.0.6", "@pushrocks/smartdelay": "^2.0.10",
"@pushrocks/smartexpress": "^3.0.52", "@pushrocks/smartexpress": "^3.0.76",
"@pushrocks/smarthash": "^2.0.6", "@pushrocks/smarthash": "^2.1.6",
"@pushrocks/smartlog": "^2.0.21", "@pushrocks/smartlog": "^2.0.39",
"@pushrocks/smartpromise": "^3.0.6", "@pushrocks/smartpromise": "^3.0.6",
"@pushrocks/smartrx": "^2.0.5", "@pushrocks/smartrx": "^2.0.19",
"@pushrocks/smartunique": "^3.0.1", "@pushrocks/smartunique": "^3.0.3",
"@types/socket.io": "^2.1.4", "@types/socket.io": "^2.1.11",
"@types/socket.io-client": "^1.4.32", "@types/socket.io-client": "^1.4.33",
"socket.io": "^2.3.0", "socket.io": "^2.3.0",
"socket.io-client": "^2.3.0" "socket.io-client": "^2.3.0"
}, },
"devDependencies": { "devDependencies": {
"@gitzone/tsbuild": "^2.1.17", "@gitzone/tsbuild": "^2.1.25",
"@gitzone/tsrun": "^1.2.8", "@gitzone/tsrun": "^1.2.12",
"@gitzone/tstest": "^1.0.28", "@gitzone/tstest": "^1.0.44",
"@pushrocks/tapbundle": "^3.0.13", "@pushrocks/tapbundle": "^3.2.9",
"@types/node": "^12.12.5", "@types/node": "^14.11.2",
"tslint": "^5.20.0", "tslint": "^6.1.3",
"tslint-config-prettier": "^1.18.0" "tslint-config-prettier": "^1.18.0"
}, },
"private": false, "private": false,

View File

@ -1,7 +1,6 @@
import * as plugins from './smartsocket.plugins'; import * as plugins from './smartsocket.plugins';
// classes // classes
import { Objectmap } from '@pushrocks/lik';
import { SocketConnection } from './smartsocket.classes.socketconnection'; import { SocketConnection } from './smartsocket.classes.socketconnection';
import { ISocketFunctionCallDataRequest, SocketFunction, ISocketFunctionCallDataResponse } from './smartsocket.classes.socketfunction'; import { ISocketFunctionCallDataRequest, SocketFunction, ISocketFunctionCallDataResponse } from './smartsocket.classes.socketfunction';
import { SocketRequest } from './smartsocket.classes.socketrequest'; import { SocketRequest } from './smartsocket.classes.socketrequest';
@ -10,6 +9,7 @@ import { SocketServer } from './smartsocket.classes.socketserver';
// socket.io // socket.io
import * as SocketIO from 'socket.io'; import * as SocketIO from 'socket.io';
import { logger } from './smartsocket.logging';
export interface ISmartsocketConstructorOptions { export interface ISmartsocketConstructorOptions {
port?: number; port?: number;
@ -22,10 +22,10 @@ export class Smartsocket {
public shortId = plugins.smartunique.shortId(); public shortId = plugins.smartunique.shortId();
public options: ISmartsocketConstructorOptions; public options: ISmartsocketConstructorOptions;
public io: SocketIO.Server; public io: SocketIO.Server;
public socketConnections = new Objectmap<SocketConnection>(); public socketConnections = new plugins.lik.ObjectMap<SocketConnection>();
public socketRoles = new Objectmap<SocketRole>(); public socketRoles = new plugins.lik.ObjectMap<SocketRole>();
public socketFunctions = new Objectmap<SocketFunction<any>>(); public socketFunctions = new plugins.lik.ObjectMap<SocketFunction<any>>();
public socketRequests = new Objectmap<SocketRequest<any>>(); public socketRequests = new plugins.lik.ObjectMap<SocketRequest<any>>();
private socketServer = new SocketServer(this); private socketServer = new SocketServer(this);
@ -55,7 +55,7 @@ export class Smartsocket {
public async stop() { public async stop() {
await plugins.smartdelay.delayFor(1000); await plugins.smartdelay.delayFor(1000);
this.socketConnections.forEach((socketObjectArg: SocketConnection) => { this.socketConnections.forEach((socketObjectArg: SocketConnection) => {
plugins.smartlog.defaultLogger.log( logger.log(
'info', 'info',
`disconnect socket with >>alias ${socketObjectArg.alias}` `disconnect socket with >>alias ${socketObjectArg.alias}`
); );
@ -118,7 +118,7 @@ export class Smartsocket {
smartsocketHost: this, smartsocketHost: this,
socket: socketArg socket: socketArg
}); });
plugins.smartlog.defaultLogger.log('info', 'Socket connected. Trying to authenticate...'); logger.log('info', 'Socket connected. Trying to authenticate...');
this.socketConnections.add(socketConnection); this.socketConnections.add(socketConnection);
await socketConnection.authenticate(); await socketConnection.authenticate();
await socketConnection.listenToFunctionRequests(); await socketConnection.listenToFunctionRequests();

View File

@ -5,7 +5,7 @@ import { SocketConnection } from './smartsocket.classes.socketconnection';
import { ISocketFunctionCallDataRequest, SocketFunction } from './smartsocket.classes.socketfunction'; import { ISocketFunctionCallDataRequest, SocketFunction } from './smartsocket.classes.socketfunction';
import { ISocketRequestDataObject, SocketRequest } from './smartsocket.classes.socketrequest'; import { ISocketRequestDataObject, SocketRequest } from './smartsocket.classes.socketrequest';
import { SocketRole } from './smartsocket.classes.socketrole'; import { SocketRole } from './smartsocket.classes.socketrole';
import { defaultLogger } from '@pushrocks/smartlog'; import { logger } from './smartsocket.logging';
/** /**
* interface for class SmartsocketClient * interface for class SmartsocketClient
@ -37,9 +37,9 @@ export class SmartsocketClient {
public eventSubject = new plugins.smartrx.rxjs.Subject<interfaces.TConnectionStatus>(); public eventSubject = new plugins.smartrx.rxjs.Subject<interfaces.TConnectionStatus>();
public eventStatus: interfaces.TConnectionStatus = 'new'; public eventStatus: interfaces.TConnectionStatus = 'new';
public socketFunctions = new plugins.lik.Objectmap<SocketFunction<any>>(); public socketFunctions = new plugins.lik.ObjectMap<SocketFunction<any>>();
public socketRequests = new plugins.lik.Objectmap<SocketRequest<any>>(); public socketRequests = new plugins.lik.ObjectMap<SocketRequest<any>>();
public socketRoles = new plugins.lik.Objectmap<SocketRole>(); public socketRoles = new plugins.lik.ObjectMap<SocketRole>();
constructor(optionsArg: ISmartsocketClientOptions) { constructor(optionsArg: ISmartsocketClientOptions) {
this.alias = optionsArg.alias; this.alias = optionsArg.alias;
@ -62,7 +62,7 @@ export class SmartsocketClient {
*/ */
public connect() { public connect() {
const done = plugins.smartpromise.defer(); const done = plugins.smartpromise.defer();
plugins.smartlog.defaultLogger.log('info', 'trying to connect...'); logger.log('info', 'trying to connect...');
const socketUrl = `${this.serverUrl}:${this.serverPort}`; const socketUrl = `${this.serverUrl}:${this.serverPort}`;
this.socketConnection = new SocketConnection({ this.socketConnection = new SocketConnection({
alias: this.alias, alias: this.alias,
@ -79,19 +79,19 @@ export class SmartsocketClient {
const timer = new plugins.smarttime.Timer(5000); const timer = new plugins.smarttime.Timer(5000);
timer.start(); timer.start();
timer.completed.then(() => { timer.completed.then(() => {
defaultLogger.log('warn', 'connection to server timed out.'); logger.log('warn', 'connection to server timed out.');
this.disconnect(); this.disconnect();
}); });
// authentication flow // authentication flow
this.socketConnection.socket.on('requestAuth', (requestAuthPayload: interfaces.IRequestAuthPayload) => { this.socketConnection.socket.on('requestAuth', (requestAuthPayload: interfaces.IRequestAuthPayload) => {
timer.reset(); timer.reset();
plugins.smartlog.defaultLogger.log('info', 'server requested authentication'); logger.log('info', 'server requested authentication');
// lets register the authenticated event // lets register the authenticated event
this.socketConnection.socket.on('authenticated', () => { this.socketConnection.socket.on('authenticated', () => {
this.remoteShortId = requestAuthPayload.serverShortId; this.remoteShortId = requestAuthPayload.serverShortId;
plugins.smartlog.defaultLogger.log('info', 'client is authenticated'); logger.log('info', 'client is authenticated');
this.socketConnection.authenticated = true; this.socketConnection.authenticated = true;
this.socketConnection.listenToFunctionRequests(); this.socketConnection.listenToFunctionRequests();
done.resolve(); done.resolve();
@ -99,7 +99,7 @@ export class SmartsocketClient {
// lets register the forbidden event // lets register the forbidden event
this.socketConnection.socket.on('forbidden', async () => { this.socketConnection.socket.on('forbidden', async () => {
defaultLogger.log('warn', `disconnecting due to being forbidden to use the ressource`); logger.log('warn', `disconnecting due to being forbidden to use the ressource`);
await this.disconnect(); await this.disconnect();
}); });
@ -136,11 +136,11 @@ export class SmartsocketClient {
*/ */
public async disconnect() { public async disconnect() {
if (this.socketConnection) { if (this.socketConnection) {
this.socketConnection.disconnect(); await this.socketConnection.disconnect();
this.socketConnection = undefined; this.socketConnection = undefined;
plugins.smartlog.defaultLogger.log('ok', 'disconnected!'); logger.log('ok', 'disconnected!');
} }
defaultLogger.log('warn', `disconnected from server ${this.remoteShortId}`); logger.log('warn', `disconnected from server ${this.remoteShortId}`);
this.remoteShortId = null; this.remoteShortId = null;
this.updateStatus('disconnected'); this.updateStatus('disconnected');

View File

@ -1,8 +1,6 @@
import * as plugins from './smartsocket.plugins'; import * as plugins from './smartsocket.plugins';
import * as interfaces from './interfaces'; import * as interfaces from './interfaces';
import { Objectmap } from '@pushrocks/lik';
// import classes // import classes
import { Smartsocket } from './smartsocket.classes.smartsocket'; import { Smartsocket } from './smartsocket.classes.smartsocket';
import { SocketFunction } from './smartsocket.classes.socketfunction'; import { SocketFunction } from './smartsocket.classes.socketfunction';
@ -12,6 +10,7 @@ import { SocketRole } from './smartsocket.classes.socketrole';
// socket.io // socket.io
import * as SocketIO from 'socket.io'; import * as SocketIO from 'socket.io';
import { SmartsocketClient } from './smartsocket.classes.smartsocketclient'; import { SmartsocketClient } from './smartsocket.classes.smartsocketclient';
import { logger } from './smartsocket.logging';
// export interfaces // export interfaces
@ -42,7 +41,7 @@ export interface ISocketConnectionAuthenticationObject {
} }
// export classes // export classes
export let allSocketConnections = new Objectmap<SocketConnection>(); export let allSocketConnections = new plugins.lik.ObjectMap<SocketConnection>();
/** /**
* class SocketConnection represents a websocket connection * class SocketConnection represents a websocket connection
@ -74,7 +73,7 @@ export class SocketConnection {
this.updateStatus('connected'); this.updateStatus('connected');
}); });
this.socket.on('disconnect', async () => { this.socket.on('disconnect', async () => {
plugins.smartlog.defaultLogger.log( logger.log(
'info', 'info',
`SocketConnection with >alias ${this.alias} on >side ${this.side} disconnected` `SocketConnection with >alias ${this.alias} on >side ${this.side} disconnected`
); );
@ -91,7 +90,7 @@ export class SocketConnection {
public authenticate() { public authenticate() {
const done = plugins.smartpromise.defer(); const done = plugins.smartpromise.defer();
this.socket.on('dataAuth', async (dataArg: ISocketConnectionAuthenticationObject) => { this.socket.on('dataAuth', async (dataArg: ISocketConnectionAuthenticationObject) => {
plugins.smartlog.defaultLogger.log( logger.log(
'info', 'info',
'received authentication data. now hashing and comparing...' 'received authentication data. now hashing and comparing...'
); );
@ -102,7 +101,7 @@ export class SocketConnection {
this.authenticated = true; this.authenticated = true;
this.role = SocketRole.getSocketRoleByName(this.smartsocketRef, dataArg.role); this.role = SocketRole.getSocketRoleByName(this.smartsocketRef, dataArg.role);
this.socket.emit('authenticated'); this.socket.emit('authenticated');
plugins.smartlog.defaultLogger.log( logger.log(
'ok', 'ok',
`socket with >>alias ${this.alias} >>role ${this.role} is authenticated!` `socket with >>alias ${this.alias} >>role ${this.role} is authenticated!`
); );
@ -130,14 +129,14 @@ export class SocketConnection {
if (this.authenticated) { if (this.authenticated) {
this.socket.on('function', (dataArg: ISocketRequestDataObject<any>) => { this.socket.on('function', (dataArg: ISocketRequestDataObject<any>) => {
// check if requested function is available to the socket's scope // check if requested function is available to the socket's scope
plugins.smartlog.defaultLogger.log('info', 'function request received'); logger.log('info', 'function request received');
const referencedFunction: SocketFunction<any> = this.role.allowedFunctions.find( const referencedFunction: SocketFunction<any> = this.role.allowedFunctions.find(
socketFunctionArg => { socketFunctionArg => {
return socketFunctionArg.name === dataArg.funcCallData.funcName; return socketFunctionArg.name === dataArg.funcCallData.funcName;
} }
); );
if (referencedFunction) { if (referencedFunction) {
plugins.smartlog.defaultLogger.log('ok', 'function in access scope'); logger.log('ok', 'function in access scope');
const localSocketRequest = new SocketRequest(this.smartsocketRef, { const localSocketRequest = new SocketRequest(this.smartsocketRef, {
side: 'responding', side: 'responding',
originSocketConnection: this, originSocketConnection: this,
@ -146,14 +145,14 @@ export class SocketConnection {
}); });
localSocketRequest.createResponse(); // takes care of creating response and sending it back localSocketRequest.createResponse(); // takes care of creating response and sending it back
} else { } else {
plugins.smartlog.defaultLogger.log( logger.log(
'warn', 'warn',
'function not existent or out of access scope' 'function not existent or out of access scope'
); );
} }
}); });
this.socket.on('functionResponse', (dataArg: ISocketRequestDataObject<any>) => { this.socket.on('functionResponse', (dataArg: ISocketRequestDataObject<any>) => {
plugins.smartlog.defaultLogger.log( logger.log(
'info', 'info',
`received response for request with id ${dataArg.shortId}` `received response for request with id ${dataArg.shortId}`
); );
@ -163,14 +162,14 @@ export class SocketConnection {
); );
targetSocketRequest.handleResponse(dataArg); targetSocketRequest.handleResponse(dataArg);
}); });
plugins.smartlog.defaultLogger.log( logger.log(
'info', 'info',
`now listening to function requests for ${this.alias}` `now listening to function requests for ${this.alias}`
); );
done.resolve(this); done.resolve(this);
} else { } else {
const errMessage = 'socket needs to be authenticated first'; const errMessage = 'socket needs to be authenticated first';
plugins.smartlog.defaultLogger.log('error', errMessage); logger.log('error', errMessage);
done.reject(errMessage); done.reject(errMessage);
} }
return done.promise; return done.promise;

View File

@ -1,7 +1,6 @@
import * as plugins from './smartsocket.plugins'; import * as plugins from './smartsocket.plugins';
// import classes // import classes
import { Objectmap } from '@pushrocks/lik';
import { SocketRole } from './smartsocket.classes.socketrole'; import { SocketRole } from './smartsocket.classes.socketrole';
import { SocketConnection } from './smartsocket.classes.socketconnection'; import { SocketConnection } from './smartsocket.classes.socketconnection';
import { Smartsocket } from './smartsocket.classes.smartsocket'; import { Smartsocket } from './smartsocket.classes.smartsocket';

View File

@ -4,9 +4,8 @@ import * as plugins from './smartsocket.plugins';
import { SocketFunction, ISocketFunctionCallDataRequest, ISocketFunctionCallDataResponse } from './smartsocket.classes.socketfunction'; import { SocketFunction, ISocketFunctionCallDataRequest, ISocketFunctionCallDataResponse } from './smartsocket.classes.socketfunction';
// import classes // import classes
import { Objectmap } from '@pushrocks/lik';
import { SocketConnection } from './smartsocket.classes.socketconnection'; import { SocketConnection } from './smartsocket.classes.socketconnection';
import { defaultLogger } from '@pushrocks/smartlog'; import { logger } from './smartsocket.logging';
import { Smartsocket } from './smartsocket.classes.smartsocket'; import { Smartsocket } from './smartsocket.classes.smartsocket';
import { SmartsocketClient } from './smartsocket.classes.smartsocketclient'; import { SmartsocketClient } from './smartsocket.classes.smartsocketclient';
@ -85,7 +84,7 @@ export class SocketRequest<T extends plugins.typedrequestInterfaces.ITypedReques
* handles the response that is received by the requesting side * handles the response that is received by the requesting side
*/ */
public async handleResponse(responseDataArg: ISocketRequestDataObject<T>) { public async handleResponse(responseDataArg: ISocketRequestDataObject<T>) {
plugins.smartlog.defaultLogger.log('info', 'handling response!'); logger.log('info', 'handling response!');
this.done.resolve(responseDataArg.funcCallData); this.done.resolve(responseDataArg.funcCallData);
this.smartsocketRef.socketRequests.remove(this); this.smartsocketRef.socketRequests.remove(this);
} }
@ -102,16 +101,16 @@ export class SocketRequest<T extends plugins.typedrequestInterfaces.ITypedReques
); );
if (!targetSocketFunction) { if (!targetSocketFunction) {
defaultLogger.log( logger.log(
'warn', 'warn',
`There is no SocketFunction defined for ${this.funcCallData.funcName}` `There is no SocketFunction defined for ${this.funcCallData.funcName}`
); );
defaultLogger.log('warn', `So now response is being sent.`); logger.log('warn', `So now response is being sent.`);
return; return;
} }
plugins.smartlog.defaultLogger.log('info', `invoking ${targetSocketFunction.name}`); logger.log('info', `invoking ${targetSocketFunction.name}`);
targetSocketFunction.invoke(this.funcCallData, this.originSocketConnection).then(resultData => { targetSocketFunction.invoke(this.funcCallData, this.originSocketConnection).then(resultData => {
plugins.smartlog.defaultLogger.log('info', 'got resultData. Sending it to requesting party.'); logger.log('info', 'got resultData. Sending it to requesting party.');
const responseData: ISocketRequestDataObject<T> = { const responseData: ISocketRequestDataObject<T> = {
funcCallData: resultData, funcCallData: resultData,
shortId: this.shortid shortId: this.shortid

View File

@ -1,7 +1,6 @@
import * as plugins from './smartsocket.plugins'; import * as plugins from './smartsocket.plugins';
// import classes // import classes
import { Objectmap } from '@pushrocks/lik';
import { SocketFunction } from './smartsocket.classes.socketfunction'; import { SocketFunction } from './smartsocket.classes.socketfunction';
import { Smartsocket } from './smartsocket.classes.smartsocket'; import { Smartsocket } from './smartsocket.classes.smartsocket';
import { SmartsocketClient } from './smartsocket.classes.smartsocketclient'; import { SmartsocketClient } from './smartsocket.classes.smartsocketclient';
@ -42,7 +41,7 @@ export class SocketRole {
// INSTANCE // INSTANCE
public name: string; public name: string;
public passwordHash: string; public passwordHash: string;
public allowedFunctions = new Objectmap<SocketFunction<any>>(); public allowedFunctions = new plugins.lik.ObjectMap<SocketFunction<any>>();
constructor(optionsArg: ISocketRoleOptions) { constructor(optionsArg: ISocketRoleOptions) {
this.name = optionsArg.name; this.name = optionsArg.name;
this.passwordHash = optionsArg.passwordHash; this.passwordHash = optionsArg.passwordHash;

View File

@ -4,6 +4,7 @@ import * as plugins from './smartsocket.plugins';
import * as http from 'http'; import * as http from 'http';
import * as https from 'https'; import * as https from 'https';
import { Smartsocket } from './smartsocket.classes.smartsocket'; import { Smartsocket } from './smartsocket.classes.smartsocket';
import { logger } from './smartsocket.logging';
/** /**
* class socketServer * class socketServer
@ -55,11 +56,11 @@ export class SocketServer {
// in case an external server has been set "this.standaloneServer" should be false // in case an external server has been set "this.standaloneServer" should be false
if (this.httpServer && this.standaloneServer) { if (this.httpServer && this.standaloneServer) {
if (!this.smartsocket.options.port) { if (!this.smartsocket.options.port) {
plugins.smartlog.defaultLogger.log('error', 'there should be a port specifed for smartsocket!'); logger.log('error', 'there should be a port specifed for smartsocket!');
throw new Error('there should be a port specified for smartsocket'); throw new Error('there should be a port specified for smartsocket');
} }
this.httpServer.listen(this.smartsocket.options.port, () => { this.httpServer.listen(this.smartsocket.options.port, () => {
plugins.smartlog.defaultLogger.log('success', `Server started in standalone mode on ${this.smartsocket.options.port}`); logger.log('success', `Server started in standalone mode on ${this.smartsocket.options.port}`);
done.resolve(); done.resolve();
}); });
} else { } else {

View File

@ -0,0 +1,3 @@
import * as plugins from './smartsocket.plugins';
export const logger = new plugins.smartlog.ConsoleLog();