diff --git a/ts/index.ts b/ts/index.ts index e95ea2d..b45a856 100644 --- a/ts/index.ts +++ b/ts/index.ts @@ -2,3 +2,5 @@ import * as plugins from "./smartsocket.plugins"; export * from "./smartsocket.classes.smartsocket"; export * from "./smartsocket.classes.smartsocketclient"; + +// need something more exposed? Create an issue on GitLab! \ No newline at end of file diff --git a/ts/smartsocket.classes.socketconnection.ts b/ts/smartsocket.classes.socketconnection.ts index 2e7556f..3da7804 100644 --- a/ts/smartsocket.classes.socketconnection.ts +++ b/ts/smartsocket.classes.socketconnection.ts @@ -43,6 +43,9 @@ export class SocketConnection { this.role = optionsArg.role; this.socket = optionsArg.socket; } + + // authenticating -------------------------- + /** * authenticate the socket */ @@ -54,7 +57,7 @@ export class SocketConnection { if ((true)) { // TODO: authenticate password this.alias = dataArg.alias this.authenticated = true; - this.role = helpers.findSocketRoleByString(dataArg.role); + this.role = helpers.getSocketRoleByName(dataArg.role); this.socket.emit("authenticated"); plugins.beautylog.ok(`socket with >>alias ${this.alias} >>role ${this.role} is authenticated!`); done.resolve(this); @@ -67,6 +70,8 @@ export class SocketConnection { return done.promise; }; + // listening ------------------------------- + /** * listen to function requests */ @@ -85,7 +90,7 @@ export class SocketConnection { shortId:dataArg.shortId, funcCallData:dataArg.funcCallData }); - localSocketRequest + localSocketRequest.createResponse(); // takes care of creating response and sending it back } else { plugins.beautylog.warn("function not existent or out of access scope"); }; @@ -97,5 +102,8 @@ export class SocketConnection { done.reject("socket needs to be authenticated first"); }; return done.promise; - } + }; + + // sending ---------------------- + }; diff --git a/ts/smartsocket.classes.socketfunction.ts b/ts/smartsocket.classes.socketfunction.ts index bf3aaca..601e3cd 100644 --- a/ts/smartsocket.classes.socketfunction.ts +++ b/ts/smartsocket.classes.socketfunction.ts @@ -1,7 +1,7 @@ import * as plugins from "./smartsocket.plugins"; // import classes -import { Stringmap } from "lik"; +import { Objectmap } from "lik"; import { SocketRole } from "./smartsocket.classes.socketrole"; // export interfaces @@ -12,20 +12,23 @@ import { SocketRole } from "./smartsocket.classes.socketrole"; /** * interface of the contructor options of class SocketFunction */ -export interface ISocketFunctionOptions { +export interface ISocketFunctionConstructorOptions { funcName: string; funcDef: any; allowedRoles: SocketRole[]; // all roles that are allowed to execute a SocketFunction }; /** - * interface of the Socket Function call + * interface of the Socket Function call, in other words the object that routes a call to a function */ export interface ISocketFunctionCall { funcName:string; funcDataArg:any; } +// export objects +export let allSocketFunctions = new Objectmap(); + // export classes /** @@ -39,13 +42,14 @@ export class SocketFunction { /** * the constructor for SocketFunction */ - constructor(optionsArg: ISocketFunctionOptions) { + constructor(optionsArg: ISocketFunctionConstructorOptions) { this.name = optionsArg.funcName; this.func = optionsArg.funcDef; this.roles = optionsArg.allowedRoles; for (let socketRoleArg of this.roles){ this._notifyRole(socketRoleArg); - } + }; + allSocketFunctions.add(this); // map instance with Objectmap }; /** @@ -60,6 +64,7 @@ export class SocketFunction { */ invoke(dataArg:any):plugins.q.Promise { let done = plugins.q.defer(); + return done.promise; }; diff --git a/ts/smartsocket.classes.socketrequest.ts b/ts/smartsocket.classes.socketrequest.ts index 616fc54..afccdb5 100644 --- a/ts/smartsocket.classes.socketrequest.ts +++ b/ts/smartsocket.classes.socketrequest.ts @@ -41,21 +41,17 @@ export class SocketRequest { side: TSocketRequestSide; shortid: string; originSocketConnection:SocketConnection; - requestData: ISocketRequestDataObject; + funcCallData: ISocketFunctionCall done = plugins.q.defer(); constructor(optionsArg: SocketRequestConstructorOptions) { this.side = optionsArg.side; this.shortid = optionsArg.shortId; + this.funcCallData = optionsArg.funcCallData; if(this.side === "requesting"){ allRequestingSocketRequests.add(this); } else { allRespondingSocketRequests.add(this); }; - // build request and response dataArg - this.requestData = { - funcCallData:optionsArg.funcCallData, - shortId:optionsArg.shortId - } }; // requesting -------------------------- @@ -64,7 +60,11 @@ export class SocketRequest { * dispatches a socketrequest from the requesting to the receiving side */ dispatch(){ - this.originSocketConnection.socket.emit("function",this.requestData); + let requestData:ISocketRequestDataObject = { + funcCallData:this.funcCallData, + shortId:this.shortid + } + this.originSocketConnection.socket.emit("function",requestData); return this.done.promise; }; diff --git a/ts/smartsocket.helpers.ts b/ts/smartsocket.helpers.ts index 87fc82a..1fb3268 100644 --- a/ts/smartsocket.helpers.ts +++ b/ts/smartsocket.helpers.ts @@ -2,13 +2,22 @@ import * as plugins from "./smartsocket.plugins"; // classes import { Smartsocket } from "./smartsocket.classes.smartsocket"; -import { SocketFunction } from "./smartsocket.classes.socketfunction"; +import { SocketFunction, allSocketFunctions } from "./smartsocket.classes.socketfunction"; import { SocketConnection } from "./smartsocket.classes.socketconnection"; import { SocketRole, allSocketRoles } from "./smartsocket.classes.socketrole"; +// SocketFunction helpers +export let getSocketFunctionByName = (functionNameArg:string) => { + return allSocketFunctions.find((socketFunctionArg) => { return socketFunctionArg.name === functionNameArg}); +} + // SocketRole helpers -export let findSocketRoleByString = (socketRoleNameArg: string): SocketRole => { + +/** + * get corresponding SocketRequest instance by name + */ +export let getSocketRoleByName = (socketRoleNameArg: string): SocketRole => { return allSocketRoles.find((socketRoleArg) => { return socketRoleArg.name === socketRoleNameArg }) };