diff --git a/dist/index.d.ts b/dist/index.d.ts
index 6da3fef..5c46efd 100644
--- a/dist/index.d.ts
+++ b/dist/index.d.ts
@@ -1 +1,2 @@
export * from "./smartsocket.classes.smartsocket";
+export * from "./smartsocket.classes.smartsocketclient";
diff --git a/dist/index.js b/dist/index.js
index e3e1dab..df74310 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -3,4 +3,5 @@ function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
__export(require("./smartsocket.classes.smartsocket"));
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsaUJBQWMsbUNBQW1DLENBQUMsRUFBQSJ9
\ No newline at end of file
+__export(require("./smartsocket.classes.smartsocketclient"));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsaUJBQWMsbUNBQW1DLENBQUMsRUFBQTtBQUNsRCxpQkFBYyx5Q0FBeUMsQ0FBQyxFQUFBIn0=
\ No newline at end of file
diff --git a/dist/smartsocket.classes.smartsocket.d.ts b/dist/smartsocket.classes.smartsocket.d.ts
index d8f0be1..a4fe738 100644
--- a/dist/smartsocket.classes.smartsocket.d.ts
+++ b/dist/smartsocket.classes.smartsocket.d.ts
@@ -1,19 +1,29 @@
///
-///
-import * as plugins from "./smartsocket.plugins";
import { Objectmap } from "lik";
+import { SocketRole } from "./smartsocket.classes.socketrole";
export interface ISocketObject {
- socket: SocketIO.Socket;
+ alias?: string;
authenticated: boolean;
+ role?: string;
+ socket: SocketIO.Socket;
}
export interface ISmartsocketConstructorOptions {
port: number;
}
export declare class Smartsocket {
+ options: ISmartsocketConstructorOptions;
io: SocketIO.Server;
openSockets: Objectmap;
- constructor(options: ISmartsocketConstructorOptions);
- startListening: any;
- authenticateSocket(socketObjectArg: ISocketObject): plugins.q.Promise<{}>;
+ registeredRoles: Objectmap;
+ constructor(optionsArg: ISmartsocketConstructorOptions);
+ /**
+ * the standard handler for new socket connections
+ */
+ private _handleSocket(socket);
+ registerFunctions(socketRoleArg: SocketRole): void;
+ /**
+ * starts listening to incling sockets:
+ */
+ startServer: () => void;
closeServer: () => void;
}
diff --git a/dist/smartsocket.classes.smartsocket.js b/dist/smartsocket.classes.smartsocket.js
index b1e53cf..f1b467b 100644
--- a/dist/smartsocket.classes.smartsocket.js
+++ b/dist/smartsocket.classes.smartsocket.js
@@ -1,39 +1,51 @@
"use strict";
const plugins = require("./smartsocket.plugins");
+const helpers = require("./smartsocket.helpers");
// classes
const lik_1 = require("lik");
;
+;
class Smartsocket {
- constructor(options) {
+ constructor(optionsArg) {
this.openSockets = new lik_1.Objectmap();
+ this.registeredRoles = new lik_1.Objectmap();
+ /**
+ * starts listening to incling sockets:
+ */
+ this.startServer = () => {
+ this.io = plugins.socketIo(this.options.port);
+ this.io.on('connection', (socketArg) => {
+ this._handleSocket(socketArg);
+ });
+ };
this.closeServer = () => {
- this.io.close();
this.openSockets.forEach((socketObjectArg) => {
+ plugins.beautylog.log(`disconnect socket with >>alias ${socketObjectArg.alias}`);
socketObjectArg.socket.disconnect();
});
this.openSockets.wipe();
+ this.io.close();
};
- this.io = plugins.socketIo(options.port);
- this.io.on('connection', (socket) => {
- let socketObject = {
- socket: socket,
- authenticated: false
- };
- this.openSockets.add(socketObject);
- this.authenticateSocket(socketObject);
- });
+ this.options = optionsArg;
}
;
- authenticateSocket(socketObjectArg) {
- let done = plugins.q.defer();
- socketObjectArg.socket.on("dataAuth", data => {
- socketObjectArg.socket.removeListener("dataAuth", () => { });
- done.resolve();
- });
- socketObjectArg.socket.emit("requestAuth");
- return done.promise;
+ /**
+ * the standard handler for new socket connections
+ */
+ _handleSocket(socket) {
+ let socketObject = {
+ socket: socket,
+ authenticated: false
+ };
+ plugins.beautylog.log("Socket connected. Trying to authenticate...");
+ this.openSockets.add(socketObject);
+ helpers.authenticateSocket(socketObject)
+ .then();
+ }
+ registerFunctions(socketRoleArg) {
+ this.registeredRoles.add(socketRoleArg);
}
;
}
exports.Smartsocket = Smartsocket;
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuY2xhc3Nlcy5zbWFydHNvY2tldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LmNsYXNzZXMuc21hcnRzb2NrZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQVksT0FBTyxXQUFNLHVCQUF1QixDQUFDLENBQUE7QUFHakQsVUFBVTtBQUNWLHNCQUEwQixLQUFLLENBQUMsQ0FBQTtBQUsvQixDQUFDO0FBT0Y7SUFHSSxZQUFZLE9BQXVDO1FBRG5ELGdCQUFXLEdBQUcsSUFBSSxlQUFTLEVBQUUsQ0FBQztRQXNCOUIsZ0JBQVcsR0FBRztZQUNWLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxlQUE4QjtnQkFDcEQsZUFBZSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN4QyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFBO1FBMUJHLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUMsTUFBTTtZQUM1QixJQUFJLFlBQVksR0FBa0I7Z0JBQzlCLE1BQU0sRUFBRSxNQUFNO2dCQUNkLGFBQWEsRUFBRSxLQUFLO2FBQ3ZCLENBQUM7WUFDRixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztJQUVELGtCQUFrQixDQUFDLGVBQThCO1FBQzdDLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUk7WUFDdEMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO1FBQ0gsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0MsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQzs7QUFRTCxDQUFDO0FBL0JZLG1CQUFXLGNBK0J2QixDQUFBIn0=
\ No newline at end of file
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuY2xhc3Nlcy5zbWFydHNvY2tldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LmNsYXNzZXMuc21hcnRzb2NrZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQVksT0FBTyxXQUFNLHVCQUF1QixDQUFDLENBQUE7QUFDakQsTUFBWSxPQUFPLFdBQU0sdUJBQXVCLENBQUMsQ0FBQTtBQUVqRCxVQUFVO0FBQ1Ysc0JBQTBCLEtBQUssQ0FBQyxDQUFBO0FBVS9CLENBQUM7QUFLRCxDQUFDO0FBRUY7SUFLSSxZQUFZLFVBQTBDO1FBRnRELGdCQUFXLEdBQUcsSUFBSSxlQUFTLEVBQUUsQ0FBQztRQUM5QixvQkFBZSxHQUFHLElBQUksZUFBUyxFQUFFLENBQUM7UUF3QmxDOztXQUVHO1FBRUgsZ0JBQVcsR0FBRztZQUNWLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVM7Z0JBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUE7UUFDRCxnQkFBVyxHQUFHO1lBQ1YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxlQUE4QjtnQkFDcEQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsa0NBQWtDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRixlQUFlLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQTtRQXZDRyxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQztJQUM5QixDQUFDOztJQUVEOztPQUVHO0lBQ0ssYUFBYSxDQUFDLE1BQU07UUFDeEIsSUFBSSxZQUFZLEdBQWtCO1lBQzlCLE1BQU0sRUFBRSxNQUFNO1lBQ2QsYUFBYSxFQUFFLEtBQUs7U0FDdkIsQ0FBQztRQUNGLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDZDQUE2QyxDQUFDLENBQUE7UUFDcEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQzthQUNuQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsYUFBd0I7UUFDdEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDNUMsQ0FBQzs7QUFxQkwsQ0FBQztBQTlDWSxtQkFBVyxjQThDdkIsQ0FBQSJ9
\ No newline at end of file
diff --git a/dist/smartsocket.classes.smartsocketclient.d.ts b/dist/smartsocket.classes.smartsocketclient.d.ts
new file mode 100644
index 0000000..db290db
--- /dev/null
+++ b/dist/smartsocket.classes.smartsocketclient.d.ts
@@ -0,0 +1,10 @@
+/**
+ * interface for class SmartsocketClient
+ */
+export interface ISmartsocketClientOptions {
+ port: number;
+ url: string;
+}
+export declare class SmartsocketClient {
+ constructor();
+}
diff --git a/dist/smartsocket.classes.smartsocketclient.js b/dist/smartsocket.classes.smartsocketclient.js
new file mode 100644
index 0000000..c34b871
--- /dev/null
+++ b/dist/smartsocket.classes.smartsocketclient.js
@@ -0,0 +1,7 @@
+"use strict";
+class SmartsocketClient {
+ constructor() {
+ }
+}
+exports.SmartsocketClient = SmartsocketClient;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuY2xhc3Nlcy5zbWFydHNvY2tldGNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LmNsYXNzZXMuc21hcnRzb2NrZXRjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQVVBO0lBQ0k7SUFFQSxDQUFDO0FBQ0wsQ0FBQztBQUpZLHlCQUFpQixvQkFJN0IsQ0FBQSJ9
\ No newline at end of file
diff --git a/dist/smartsocket.classes.socketfunction.d.ts b/dist/smartsocket.classes.socketfunction.d.ts
new file mode 100644
index 0000000..f2ecd87
--- /dev/null
+++ b/dist/smartsocket.classes.socketfunction.d.ts
@@ -0,0 +1,12 @@
+import { SocketRole } from "./smartsocket.classes.socketrole";
+export interface SocketFunctionOptions {
+ name: string;
+ func: any;
+ roles: SocketRole[];
+}
+export declare class SocketFunction {
+ name: string;
+ func: any;
+ roles: SocketRole[];
+ constructor(optionsArg: SocketFunctionOptions);
+}
diff --git a/dist/smartsocket.classes.socketfunction.js b/dist/smartsocket.classes.socketfunction.js
new file mode 100644
index 0000000..3ab3af9
--- /dev/null
+++ b/dist/smartsocket.classes.socketfunction.js
@@ -0,0 +1,12 @@
+"use strict";
+;
+class SocketFunction {
+ constructor(optionsArg) {
+ this.name = optionsArg.name;
+ this.func = optionsArg.func;
+ this.roles = optionsArg.roles;
+ }
+ ;
+}
+exports.SocketFunction = SocketFunction;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuY2xhc3Nlcy5zb2NrZXRmdW5jdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LmNsYXNzZXMuc29ja2V0ZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQVlDLENBQUM7QUFFRjtJQUlJLFlBQVksVUFBaUM7UUFDekMsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7SUFDbEMsQ0FBQzs7QUFDTCxDQUFDO0FBVFksc0JBQWMsaUJBUzFCLENBQUEifQ==
\ No newline at end of file
diff --git a/dist/smartsocket.classes.socketrole.d.ts b/dist/smartsocket.classes.socketrole.d.ts
new file mode 100644
index 0000000..02dc56d
--- /dev/null
+++ b/dist/smartsocket.classes.socketrole.d.ts
@@ -0,0 +1,15 @@
+/**
+ * interface for class SocketRole
+ */
+export interface SocketRoleOptions {
+ name: string;
+ passwordHash: string;
+}
+/**
+ * A socketrole defines access to certain routines.
+ */
+export declare class SocketRole {
+ name: string;
+ passwordHash: string;
+ constructor(optionsArg: SocketRoleOptions);
+}
diff --git a/dist/smartsocket.classes.socketrole.js b/dist/smartsocket.classes.socketrole.js
new file mode 100644
index 0000000..efbe61f
--- /dev/null
+++ b/dist/smartsocket.classes.socketrole.js
@@ -0,0 +1,12 @@
+"use strict";
+/**
+ * A socketrole defines access to certain routines.
+ */
+class SocketRole {
+ constructor(optionsArg) {
+ this.name = optionsArg.name;
+ this.passwordHash = optionsArg.passwordHash;
+ }
+}
+exports.SocketRole = SocketRole;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuY2xhc3Nlcy5zb2NrZXRyb2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRzb2NrZXQuY2xhc3Nlcy5zb2NrZXRyb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFjQTs7R0FFRztBQUNIO0lBR0ksWUFBWSxVQUE0QjtRQUNwQyxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO0lBQ2hELENBQUM7QUFDTCxDQUFDO0FBUFksa0JBQVUsYUFPdEIsQ0FBQSJ9
\ No newline at end of file
diff --git a/dist/smartsocket.helpers.d.ts b/dist/smartsocket.helpers.d.ts
index e69de29..d30673c 100644
--- a/dist/smartsocket.helpers.d.ts
+++ b/dist/smartsocket.helpers.d.ts
@@ -0,0 +1,7 @@
+///
+import * as plugins from "./smartsocket.plugins";
+import { ISocketObject } from "./smartsocket.classes.smartsocket";
+/**
+ * authenticate a socket
+ */
+export declare let authenticateSocket: (socketObjectArg: ISocketObject) => plugins.q.Promise<{}>;
diff --git a/dist/smartsocket.helpers.js b/dist/smartsocket.helpers.js
index 1834b0a..fc62b3d 100644
--- a/dist/smartsocket.helpers.js
+++ b/dist/smartsocket.helpers.js
@@ -1,2 +1,28 @@
"use strict";
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LmhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
\ No newline at end of file
+const plugins = require("./smartsocket.plugins");
+/**
+ * authenticate a socket
+ */
+exports.authenticateSocket = (socketObjectArg) => {
+ let done = plugins.q.defer();
+ socketObjectArg.socket.on("dataAuth", dataArg => {
+ plugins.beautylog.log("received authentication data. now hashing and comparing...");
+ socketObjectArg.socket.removeListener("dataAuth", () => { });
+ if ((true)) {
+ socketObjectArg.alias = dataArg.alias;
+ socketObjectArg.authenticated = true;
+ socketObjectArg.role = dataArg.role;
+ socketObjectArg.socket.emit("authenticated");
+ plugins.beautylog.ok(`socket with >>alias ${socketObjectArg.alias} >>role ${socketObjectArg.role} is authenticated!`);
+ done.resolve(socketObjectArg);
+ }
+ else {
+ socketObjectArg.socket.disconnect();
+ done.reject("not authenticated");
+ }
+ ;
+ });
+ socketObjectArg.socket.emit("requestAuth");
+ return done.promise;
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LmhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQVksT0FBTyxXQUFNLHVCQUF1QixDQUFDLENBQUE7QUFRakQ7O0dBRUc7QUFDUSwwQkFBa0IsR0FBRyxDQUFDLGVBQThCO0lBQzNELElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0IsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLE9BQU87UUFDekMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsNERBQTRELENBQUMsQ0FBQztRQUNwRixlQUFlLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM3RCxFQUFFLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUEsQ0FBQztZQUNQLGVBQWUsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQTtZQUNyQyxlQUFlLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUNyQyxlQUFlLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDcEMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDN0MsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxLQUFLLFdBQVcsZUFBZSxDQUFDLElBQUksb0JBQW9CLENBQUMsQ0FBQTtZQUNySCxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLGVBQWUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFBQSxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7SUFDSCxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUN4QixDQUFDLENBQUMifQ==
\ No newline at end of file
diff --git a/dist/smartsocket.plugins.d.ts b/dist/smartsocket.plugins.d.ts
index 5de4cd4..c2cdd28 100644
--- a/dist/smartsocket.plugins.d.ts
+++ b/dist/smartsocket.plugins.d.ts
@@ -3,4 +3,5 @@ export import beautylog = require("beautylog");
export import lik = require("lik");
export import q = require("q");
export import socketIo = require("socket.io");
+export import socketIoClient = require("socket.io-client");
export import taskbuffer = require("taskbuffer");
diff --git a/dist/smartsocket.plugins.js b/dist/smartsocket.plugins.js
index 5a8521c..53e7b41 100644
--- a/dist/smartsocket.plugins.js
+++ b/dist/smartsocket.plugins.js
@@ -4,5 +4,6 @@ exports.beautylog = require("beautylog");
exports.lik = require("lik");
exports.q = require("q");
exports.socketIo = require("socket.io");
+exports.socketIoClient = require("socket.io-client");
exports.taskbuffer = require("taskbuffer");
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUNWLGlCQUFTLFdBQVcsV0FBVyxDQUFDLENBQUM7QUFDakMsV0FBRyxXQUFZLEtBQUssQ0FBQyxDQUFDO0FBQ3RCLFNBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUNqQixnQkFBUSxXQUFXLFdBQVcsQ0FBQyxDQUFDO0FBQ2hDLGtCQUFVLFdBQVcsWUFBWSxDQUFDLENBQUMifQ==
\ No newline at end of file
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUNWLGlCQUFTLFdBQVcsV0FBVyxDQUFDLENBQUM7QUFDakMsV0FBRyxXQUFZLEtBQUssQ0FBQyxDQUFDO0FBQ3RCLFNBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUNqQixnQkFBUSxXQUFXLFdBQVcsQ0FBQyxDQUFDO0FBQ2hDLHNCQUFjLFdBQVcsa0JBQWtCLENBQUMsQ0FBQztBQUM3QyxrQkFBVSxXQUFXLFlBQVksQ0FBQyxDQUFDIn0=
\ No newline at end of file
diff --git a/package.json b/package.json
index a664518..478a22d 100644
--- a/package.json
+++ b/package.json
@@ -22,7 +22,7 @@
"@types/socket.io": "^1.4.26",
"@types/socket.io-client": "^1.4.26",
"beautylog": "^5.0.20",
- "lik": "^1.0.9",
+ "lik": "^1.0.10",
"q": "^1.4.1",
"socket.io": "^1.4.8",
"socket.io-client": "^1.4.8",
diff --git a/test/test.js b/test/test.js
index d6f5add..7a93c30 100644
--- a/test/test.js
+++ b/test/test.js
@@ -9,16 +9,29 @@ describe("smartsocket", function () {
testSmartsocket = new smartsocket.Smartsocket({ port: 3000 });
testSmartsocket.should.be.instanceOf(smartsocket.Smartsocket);
});
+ it("should register a new Function", function () {
+ });
+ it("should start listening when .started is called", function () {
+ testSmartsocket.startServer();
+ });
it("should react to a new websocket connection", function (done) {
this.timeout(10000);
let socket = socketIoClient("http://localhost:3000", {});
socket.on("requestAuth", function () {
console.log("server requested authentication");
socket.emit("dataAuth", {
- secret: "hello"
+ role: "coreflowContainer",
+ password: "somePassword",
+ alias: "coreflow1"
+ });
+ socket.on("authenticated", () => {
+ console.log("client is authenticated");
+ done();
});
- done();
});
});
+ it("should close the server", function () {
+ testSmartsocket.closeServer();
+ });
});
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFDdEIsUUFBTyxRQUFRLENBQUMsQ0FBQTtBQUNoQixNQUFPLGNBQWMsV0FBVyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3BELE1BQU8sV0FBVyxXQUFXLGVBQWUsQ0FBQyxDQUFDO0FBRTlDLElBQUksZUFBd0MsQ0FBQztBQUU3QyxRQUFRLENBQUMsYUFBYSxFQUFFO0lBQ3BCLEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRTtRQUNsQyxlQUFlLEdBQUcsSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDOUQsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRSxDQUFDLENBQUMsQ0FBQztJQUNILEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxVQUFVLElBQUk7UUFDM0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQixJQUFJLE1BQU0sR0FBRyxjQUFjLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDekQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUU7WUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNwQixNQUFNLEVBQUUsT0FBTzthQUNsQixDQUFDLENBQUM7WUFDSCxJQUFJLEVBQUUsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUMsQ0FBQyJ9
\ No newline at end of file
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFDdEIsUUFBTyxRQUFRLENBQUMsQ0FBQTtBQUNoQixNQUFPLGNBQWMsV0FBVyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3BELE1BQU8sV0FBVyxXQUFXLGVBQWUsQ0FBQyxDQUFDO0FBRTlDLElBQUksZUFBd0MsQ0FBQztBQUU3QyxRQUFRLENBQUMsYUFBYSxFQUFFO0lBQ3BCLEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRTtRQUNsQyxlQUFlLEdBQUcsSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDOUQsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRSxDQUFDLENBQUMsQ0FBQztJQUNILEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBQztJQUVwQyxDQUFDLENBQUMsQ0FBQTtJQUNGLEVBQUUsQ0FBQyxnREFBZ0QsRUFBQztRQUNoRCxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQyxDQUFDLENBQUE7SUFDRixFQUFFLENBQUMsNENBQTRDLEVBQUUsVUFBVSxJQUFJO1FBQzNELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEIsSUFBSSxNQUFNLEdBQUcsY0FBYyxDQUFDLHVCQUF1QixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFO1lBQ3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLENBQUMsQ0FBQztZQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDcEIsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLEtBQUssRUFBRSxXQUFXO2FBQ3JCLENBQUMsQ0FBQztZQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFDO2dCQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7Z0JBQ3ZDLElBQUksRUFBRSxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0gsRUFBRSxDQUFDLHlCQUF5QixFQUFDO1FBQ3pCLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQyxDQUFDIn0=
\ No newline at end of file
diff --git a/test/test.ts b/test/test.ts
index 5517327..9438c47 100644
--- a/test/test.ts
+++ b/test/test.ts
@@ -10,15 +10,29 @@ describe("smartsocket", function () {
testSmartsocket = new smartsocket.Smartsocket({ port: 3000 });
testSmartsocket.should.be.instanceOf(smartsocket.Smartsocket);
});
+ it("should register a new Function",function(){
+
+ })
+ it("should start listening when .started is called",function(){
+ testSmartsocket.startServer();
+ })
it("should react to a new websocket connection", function (done) {
this.timeout(10000);
let socket = socketIoClient("http://localhost:3000", {});
socket.on("requestAuth", function () {
console.log("server requested authentication");
socket.emit("dataAuth", {
- secret: "hello"
+ role: "coreflowContainer",
+ password: "somePassword",
+ alias: "coreflow1"
+ });
+ socket.on("authenticated",() => {
+ console.log("client is authenticated");
+ done();
});
- done();
});
+ });
+ it("should close the server",function(){
+ testSmartsocket.closeServer();
})
});
\ No newline at end of file
diff --git a/ts/smartsocket.classes.smartsocket.ts b/ts/smartsocket.classes.smartsocket.ts
index a6949a2..8504b65 100644
--- a/ts/smartsocket.classes.smartsocket.ts
+++ b/ts/smartsocket.classes.smartsocket.ts
@@ -8,9 +8,10 @@ import {SocketFunction} from "./smartsocket.classes.socketfunction";
export interface ISocketObject {
- group?:string,
- socket: SocketIO.Socket,
+ alias?:string;
authenticated: boolean
+ role?:string,
+ socket: SocketIO.Socket,
};
export interface ISmartsocketConstructorOptions {
@@ -19,12 +20,12 @@ export interface ISmartsocketConstructorOptions {
};
export class Smartsocket {
+ options:ISmartsocketConstructorOptions
io: SocketIO.Server;
openSockets = new Objectmap();
registeredRoles = new Objectmap();
- constructor(options: ISmartsocketConstructorOptions) {
- this.io = plugins.socketIo(options.port);
- this.io.on('connection', this._handleSocket);
+ constructor(optionsArg: ISmartsocketConstructorOptions) {
+ this.options = optionsArg;
};
/**
@@ -35,22 +36,33 @@ export class Smartsocket {
socket: socket,
authenticated: false
};
+ plugins.beautylog.log("Socket connected. Trying to authenticate...")
this.openSockets.add(socketObject);
helpers.authenticateSocket(socketObject)
.then();
}
- registerRole(socketRoleArg:SocketRole){
+ registerFunctions(socketRoleArg:SocketRole){
this.registeredRoles.add(socketRoleArg);
};
+ /**
+ * starts listening to incling sockets:
+ */
+ startServer = () => {
+ this.io = plugins.socketIo(this.options.port);
+ this.io.on('connection', (socketArg) => {
+ this._handleSocket(socketArg);
+ });
+ }
closeServer = () => {
- this.io.close();
this.openSockets.forEach((socketObjectArg: ISocketObject) => {
+ plugins.beautylog.log(`disconnect socket with >>alias ${socketObjectArg.alias}`);
socketObjectArg.socket.disconnect();
});
this.openSockets.wipe();
+ this.io.close();
}
}
\ No newline at end of file
diff --git a/ts/smartsocket.classes.socketfunction.ts b/ts/smartsocket.classes.socketfunction.ts
index 0271117..efd3522 100644
--- a/ts/smartsocket.classes.socketfunction.ts
+++ b/ts/smartsocket.classes.socketfunction.ts
@@ -1,6 +1,7 @@
import * as plugins from "./smartsocket.plugins";
// import classes
+import { Stringmap } from "lik";
import { SocketRole } from "./smartsocket.classes.socketrole";
diff --git a/ts/smartsocket.classes.socketrole.ts b/ts/smartsocket.classes.socketrole.ts
index 7ab3bf9..4af71c7 100644
--- a/ts/smartsocket.classes.socketrole.ts
+++ b/ts/smartsocket.classes.socketrole.ts
@@ -1,5 +1,8 @@
import * as plugins from "./smartsocket.plugins";
+// import classes
+import { Stringmap } from "lik";
+
/**
* interface for class SocketRole
*/
diff --git a/ts/smartsocket.helpers.ts b/ts/smartsocket.helpers.ts
index dc9a197..cb0e545 100644
--- a/ts/smartsocket.helpers.ts
+++ b/ts/smartsocket.helpers.ts
@@ -11,9 +11,20 @@ import {ISocketObject} from "./smartsocket.classes.smartsocket";
*/
export let authenticateSocket = (socketObjectArg: ISocketObject) => {
let done = plugins.q.defer();
- socketObjectArg.socket.on("dataAuth", data => {
+ socketObjectArg.socket.on("dataAuth", dataArg => {
+ plugins.beautylog.log("received authentication data. now hashing and comparing...");
socketObjectArg.socket.removeListener("dataAuth", () => { });
- done.resolve();
+ if((true)){ // TODO: authenticate password
+ socketObjectArg.alias = dataArg.alias
+ socketObjectArg.authenticated = true;
+ socketObjectArg.role = dataArg.role;
+ socketObjectArg.socket.emit("authenticated");
+ plugins.beautylog.ok(`socket with >>alias ${socketObjectArg.alias} >>role ${socketObjectArg.role} is authenticated!`)
+ done.resolve(socketObjectArg);
+ } else {
+ socketObjectArg.socket.disconnect();
+ done.reject("not authenticated");
+ };
});
socketObjectArg.socket.emit("requestAuth");
return done.promise;