diff --git a/package-lock.json b/package-lock.json index cd4d6c0..86a09b7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -330,9 +330,9 @@ } }, "@pushrocks/smartsocket": { - "version": "1.1.37", - "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartsocket/-/smartsocket-1.1.37.tgz", - "integrity": "sha512-4XYj4v7yrvmh1PlKe7u6fE84bsAn4c8loGA/hxbB1IPntXBXZbXqEXnOQo6Dpqxwk6nGC4ABGpZIMXf+o6qcLQ==", + "version": "1.1.38", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartsocket/-/smartsocket-1.1.38.tgz", + "integrity": "sha512-mGWEuA53GqTFOCebwo4Ayu2l7xjui7I0tdUNgZShGhIr4yv+q3sP/66q6cT388xVawIN+swviJPlPoogaoZXdA==", "requires": { "@pushrocks/lik": "^3.0.5", "@pushrocks/smartdelay": "^2.0.3", @@ -510,9 +510,9 @@ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" }, "@types/node": { - "version": "12.0.6", - "resolved": "https://verdaccio.lossless.one/@types%2fnode/-/node-12.0.6.tgz", - "integrity": "sha512-3sV/MUw6uYxPaRIoooI/MjO0j1A06JNlbpkGc56F+zikO52qavehD/Qw85so47gWhO82tNzEFoF6adXqIfK+EA==" + "version": "12.0.7", + "resolved": "https://verdaccio.lossless.one/@types%2fnode/-/node-12.0.7.tgz", + "integrity": "sha512-1YKeT4JitGgE4SOzyB9eMwO0nGVNkNEsm9qlIt1Lqm/tG2QEiSMTD4kS3aO6L+w5SClLVxALmIBESK6Mk5wX0A==" }, "@types/range-parser": { "version": "1.2.3", diff --git a/package.json b/package.json index 6861e4f..de647d1 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@gitzone/tsbuild": "^2.1.11", "@gitzone/tstest": "^1.0.24", "@pushrocks/tapbundle": "^3.0.9", - "@types/node": "^12.0.6", + "@types/node": "^12.0.7", "tslint": "^5.17.0", "tslint-config-prettier": "^1.18.0" }, @@ -33,7 +33,7 @@ "@pushrocks/smartpromise": "^3.0.2", "@pushrocks/smartrequest": "^1.1.15", "@pushrocks/smartrx": "^2.0.3", - "@pushrocks/smartsocket": "^1.1.37", + "@pushrocks/smartsocket": "^1.1.38", "@pushrocks/smarttime": "^3.0.7", "@pushrocks/smartunique": "^3.0.1" }, diff --git a/ts/interfaces/universeconnection.interfaces.ts b/ts/interfaces/universeconnection.interfaces.ts new file mode 100644 index 0000000..7f239ef --- /dev/null +++ b/ts/interfaces/universeconnection.interfaces.ts @@ -0,0 +1,4 @@ +export interface IAuthenticationRequest { + channelName: string; + password: string; +} \ No newline at end of file diff --git a/ts/smartuniverse.classes.universe.ts b/ts/smartuniverse.classes.universe.ts index 318c251..8fea061 100644 --- a/ts/smartuniverse.classes.universe.ts +++ b/ts/smartuniverse.classes.universe.ts @@ -95,12 +95,12 @@ export class Universe { const SubscriptionSocketFunction = new plugins.smartsocket.SocketFunction({ allowedRoles: [ClientRole], // there is only one client role, Authentication happens on another level funcName: 'channelSubscription', - funcDef: async (dataArg, socketConnectionArg) => { + funcDef: async (dataArg: interfaces.IServerCallSubscribeActionPayload, socketConnectionArg) => { // run in "this context" of this class (() => { // TODO: properly add the connection const universeConnection = new UniverseConnection({ - + authenticationRequest: }) this.universeConnectionManager.addConnection(); })(); diff --git a/ts/smartuniverse.classes.universeconnection.ts b/ts/smartuniverse.classes.universeconnection.ts index 3ba82a8..f4e8a49 100644 --- a/ts/smartuniverse.classes.universeconnection.ts +++ b/ts/smartuniverse.classes.universeconnection.ts @@ -5,21 +5,29 @@ import { UniverseChannel } from './smartuniverse.classes.universechannel'; * represents a connection to the universe */ export class UniverseConnection { + public terminatedDeferred = plugins.smartpromise.defer(); + + /** * the socketClient to ping */ public socketConnection: plugins.smartsocket.SocketConnection; - public authenticationRequests = [] + public authenticationRequests = []; public subscribedChannels: UniverseChannel[] = []; public authenticatedChannels: UniverseChannel[] = []; public failedToJoinChannels: UniverseChannel[] = []; + /** + * terminates the connection + */ public terminateConnection () { - this.socketConnection + this.socketConnection.socket.disconnect(); + this.terminatedDeferred.resolve(); } constructor(optionsArg: { socketConnection: plugins.smartsocket.SocketConnection; + authenticationRequests }) { this.socketConnection, } diff --git a/ts/smartuniverse.classes.universeconnectionmanager.ts b/ts/smartuniverse.classes.universeconnectionmanager.ts index a6a8712..3314895 100644 --- a/ts/smartuniverse.classes.universeconnectionmanager.ts +++ b/ts/smartuniverse.classes.universeconnectionmanager.ts @@ -7,5 +7,23 @@ import { UniverseConnection } from './smartuniverse.classes.universeconnection'; export class UniverseConnectionManager { public connectionMap = new plugins.lik.Objectmap(); - public addConnection() {} + public async addConnection(universeConnectionArg: UniverseConnection) { + let universeConnection = universeConnectionArg; + universeConnection = await this.deduplicateUniverseConnection(universeConnection); + universeConnection = this.authenticateAuthenticationRequests(); + } + + /** + * deduplicates UniverseConnections + */ + public deduplicateUniverseConnection (universeConnectionArg: UniverseConnection): Promise { + + } + + /** + * authenticate AuthenticationRequests + */ + public authenticateAuthenticationRequests(universeConnectionArg) { + + } }