From fdfa690b2355c9c4f44be840a0c1fad2a4231a49 Mon Sep 17 00:00:00 2001 From: Ahmed Zamil Date: Mon, 15 Jul 2019 14:22:40 +0300 Subject: [PATCH] ES6 modules --- module.js | 2 +- package-lock.json | 2 +- src/{ => Data}/AutoList.js | 5 +- src/{ => Data}/AutoMap.js | 4 +- src/{ => Data}/BinaryList.js | 7 +- src/{ => Data}/Codec.js | 21 +-- src/{ => Data}/DataConverter.js | 15 +- src/{ => Data}/DataType.js | 2 +- src/{ => Data}/Guid.js | 2 +- src/{ => Data}/KeyList.js | 3 +- src/{ => Data}/NotModified.js | 2 +- src/{ => Data}/PropertyValue.js | 2 +- src/{ => Data}/ResourceArray.js | 2 +- src/Data/ResourceComparisionResult.js | 7 + src/{ => Data}/Structure.js | 2 +- src/{ => Data}/StructureArray.js | 3 +- src/Data/StructureComparisonResult.js | 9 ++ src/{ => Engine}/AsyncBag.js | 4 +- src/{ => Engine}/AsyncException.js | 35 +--- src/{ => Engine}/AsyncQueue.js | 6 +- src/{ => Engine}/AsyncReply.js | 15 +- src/Engine/ExceptionCode.js | 30 ++++ src/{ => Engine}/IDestructible.js | 4 +- src/{ => Engine}/IEventHandler.js | 2 +- src/{ => Net/IIP}/DistributedConnection.js | 141 ++++++++++++---- .../IIP}/DistributedPropertyContext.js | 2 +- src/{ => Net/IIP}/DistributedResource.js | 6 +- .../IIP}/DistributedResourceQueueItem.js | 7 +- src/{ => Net/Packets}/IIPAuthPacket.js | 9 +- src/{ => Net/Packets}/IIPPacket.js | 10 +- src/{ => Net}/SendList.js | 4 +- src/{ => Net/Sockets}/NetworkBuffer.js | 4 +- src/{ => Resource}/CustomResourceEvent.js | 2 +- src/{ => Resource}/IResource.js | 6 +- src/{ => Resource}/IStore.js | 4 +- src/{ => Resource}/Instance.js | 12 +- src/{ => Resource/Template}/EventTemplate.js | 9 +- .../Template}/FunctionTemplate.js | 12 +- src/{ => Resource/Template}/MemberTemplate.js | 7 +- .../Template}/PropertyTemplate.js | 27 ++-- .../Template}/ResourceTemplate.js | 12 +- src/{ => Resource}/Warehouse.js | 153 +++++++++++++----- .../Authority}/Authentication.js | 6 +- src/{ => Security/Authority}/Session.js | 2 +- src/{ => Security/Integrity}/SHA256.js | 6 +- .../Permissions}/IPermissionsManager.js | 6 +- src/{ => Stores}/MemoryStore.js | 4 +- src/esiur.js | 2 + test/test-debug.html | 38 +---- test/test.js | 41 +++++ 50 files changed, 474 insertions(+), 244 deletions(-) rename src/{ => Data}/AutoList.js (94%) rename src/{ => Data}/AutoMap.js (92%) rename src/{ => Data}/BinaryList.js (98%) rename src/{ => Data}/Codec.js (99%) rename src/{ => Data}/DataConverter.js (97%) rename src/{ => Data}/DataType.js (98%) rename src/{ => Data}/Guid.js (97%) rename src/{ => Data}/KeyList.js (97%) rename src/{ => Data}/NotModified.js (97%) rename src/{ => Data}/PropertyValue.js (97%) rename src/{ => Data}/ResourceArray.js (96%) create mode 100644 src/Data/ResourceComparisionResult.js rename src/{ => Data}/Structure.js (97%) rename src/{ => Data}/StructureArray.js (96%) create mode 100644 src/Data/StructureComparisonResult.js rename src/{ => Engine}/AsyncBag.js (96%) rename src/{ => Engine}/AsyncException.js (70%) rename src/{ => Engine}/AsyncQueue.js (94%) rename src/{ => Engine}/AsyncReply.js (93%) create mode 100644 src/Engine/ExceptionCode.js rename src/{ => Engine}/IDestructible.js (92%) rename src/{ => Engine}/IEventHandler.js (98%) rename src/{ => Net/IIP}/DistributedConnection.js (95%) rename src/{ => Net/IIP}/DistributedPropertyContext.js (96%) rename src/{ => Net/IIP}/DistributedResource.js (96%) rename src/{ => Net/IIP}/DistributedResourceQueueItem.js (93%) rename src/{ => Net/Packets}/IIPAuthPacket.js (98%) rename src/{ => Net/Packets}/IIPPacket.js (99%) rename src/{ => Net}/SendList.js (93%) rename src/{ => Net/Sockets}/NetworkBuffer.js (97%) rename src/{ => Resource}/CustomResourceEvent.js (96%) rename src/{ => Resource}/IResource.js (91%) rename src/{ => Resource}/IStore.js (94%) rename src/{ => Resource}/Instance.js (94%) rename src/{ => Resource/Template}/EventTemplate.js (83%) rename src/{ => Resource/Template}/FunctionTemplate.js (83%) rename src/{ => Resource/Template}/MemberTemplate.js (91%) rename src/{ => Resource/Template}/PropertyTemplate.js (82%) rename src/{ => Resource/Template}/ResourceTemplate.js (96%) rename src/{ => Resource}/Warehouse.js (54%) rename src/{ => Security/Authority}/Authentication.js (93%) rename src/{ => Security/Authority}/Session.js (98%) rename src/{ => Security/Integrity}/SHA256.js (98%) rename src/{ => Security/Permissions}/IPermissionsManager.js (95%) rename src/{ => Stores}/MemoryStore.js (95%) create mode 100644 src/esiur.js create mode 100644 test/test.js diff --git a/module.js b/module.js index 4cf078b..0476e51 100644 --- a/module.js +++ b/module.js @@ -5,4 +5,4 @@ exports.printMsg = function() { module.exports = { Warehouse, DistributedConnection}; -var WebSocket = require('ws') +let WebSocket = require('ws') diff --git a/package-lock.json b/package-lock.json index 9272a2a..99dd3d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "esiur", - "version": "1.0.0", + "version": "1.2.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/src/AutoList.js b/src/Data/AutoList.js similarity index 94% rename from src/AutoList.js rename to src/Data/AutoList.js index 2f79068..49b2b36 100644 --- a/src/AutoList.js +++ b/src/Data/AutoList.js @@ -26,7 +26,10 @@ "use strict"; -class AutoList extends IEventHandler +import IEventHandler from '../Engine/IEventHandler.js'; +import IDestructible from '../Engine/IDestructible.js'; + +export default class AutoList extends IEventHandler { constructor() { diff --git a/src/AutoMap.js b/src/Data/AutoMap.js similarity index 92% rename from src/AutoMap.js rename to src/Data/AutoMap.js index bc6881e..cb3a586 100644 --- a/src/AutoMap.js +++ b/src/Data/AutoMap.js @@ -25,8 +25,10 @@ */ "use strict"; +import IEventHandler from '../Engine/IEventHandler.js'; +import IDestructible from '../Engine/IDestructible.js'; -class AutoMap extends IEventHandler +export default class AutoMap extends IEventHandler { constructor() { diff --git a/src/BinaryList.js b/src/Data/BinaryList.js similarity index 98% rename from src/BinaryList.js rename to src/Data/BinaryList.js index c11ab0c..c35100e 100644 --- a/src/BinaryList.js +++ b/src/Data/BinaryList.js @@ -26,11 +26,10 @@ "use strict"; -function BL(){ - return new BinaryList(); -}; +import DataType from './DataType.js'; +import DC from './DataConverter.js'; -class BinaryList +export default class BinaryList { constructor() diff --git a/src/Codec.js b/src/Data/Codec.js similarity index 99% rename from src/Codec.js rename to src/Data/Codec.js index e32b316..f7eb37e 100644 --- a/src/Codec.js +++ b/src/Data/Codec.js @@ -26,26 +26,13 @@ "use strict"; -const ResourceComparisonResult = - { - Null: 0, - Distributed: 1, - Local: 2, - Same: 3 - }; +import DataType from './DataType.js'; +import ResourceComparisonResult from './ResourceComparisionResult.js'; +import StructureComparisonResult from './StructureComparisonResult.js'; -const StructureComparisonResult = - { - Null: 0, - Structure: 1, - StructureSameKeys: 2, - StructureSameTypes: 3, - Same: 4 - }; -class Codec { +export default class Codec { - static parse(data, offset, sizeObject, connection, dataType = DataType.Unspecified) { var size; diff --git a/src/DataConverter.js b/src/Data/DataConverter.js similarity index 97% rename from src/DataConverter.js rename to src/Data/DataConverter.js index db6e7b0..0e5bd0b 100644 --- a/src/DataConverter.js +++ b/src/Data/DataConverter.js @@ -24,12 +24,15 @@ * Created by Ahmed Zamil on 25/07/2017. */ -"use strict"; +"use strict"; -const UNIX_EPOCH = 621355968000000000; -const TWO_PWR_32 = (1 << 16) * (1 << 16); +import BinaryList from './BinaryList.js'; +import Guid from './Guid.js'; -class DC extends Uint8Array// extends DataView // Data Converter +export const UNIX_EPOCH = 621355968000000000; +export const TWO_PWR_32 = (1 << 16) * (1 << 16); + +export default class DC extends Uint8Array { constructor(bufferOrSize) { super(bufferOrSize); @@ -499,4 +502,8 @@ class DC extends Uint8Array// extends DataView // Data Converter } } +export function BL(){ + return new BinaryList(); +}; +export {DC}; diff --git a/src/DataType.js b/src/Data/DataType.js similarity index 98% rename from src/DataType.js rename to src/Data/DataType.js index 307d416..d443db1 100644 --- a/src/DataType.js +++ b/src/Data/DataType.js @@ -26,7 +26,7 @@ "use strict"; -const DataType = +export default //const DataType = { Void: 0x0, //Variant, diff --git a/src/Guid.js b/src/Data/Guid.js similarity index 97% rename from src/Guid.js rename to src/Data/Guid.js index 9f76df8..29bdea7 100644 --- a/src/Guid.js +++ b/src/Data/Guid.js @@ -26,7 +26,7 @@ "use strict"; -class Guid +export default class Guid { constructor(dc) { diff --git a/src/KeyList.js b/src/Data/KeyList.js similarity index 97% rename from src/KeyList.js rename to src/Data/KeyList.js index 688f037..16448eb 100644 --- a/src/KeyList.js +++ b/src/Data/KeyList.js @@ -25,8 +25,9 @@ */ "use strict"; +import IDestructible from '../Engine/IDestructible.js'; -class KeyList +export default class KeyList { constructor() { diff --git a/src/NotModified.js b/src/Data/NotModified.js similarity index 97% rename from src/NotModified.js rename to src/Data/NotModified.js index 9599618..370624e 100644 --- a/src/NotModified.js +++ b/src/Data/NotModified.js @@ -26,7 +26,7 @@ "use strict"; -class NotModified +export default class NotModified { } \ No newline at end of file diff --git a/src/PropertyValue.js b/src/Data/PropertyValue.js similarity index 97% rename from src/PropertyValue.js rename to src/Data/PropertyValue.js index ffc0bb9..36f2e31 100644 --- a/src/PropertyValue.js +++ b/src/Data/PropertyValue.js @@ -26,7 +26,7 @@ "use strict"; -class PropertyValue +export default class PropertyValue { constructor(value, age, date) { diff --git a/src/ResourceArray.js b/src/Data/ResourceArray.js similarity index 96% rename from src/ResourceArray.js rename to src/Data/ResourceArray.js index 79818f8..c08edd6 100644 --- a/src/ResourceArray.js +++ b/src/Data/ResourceArray.js @@ -26,7 +26,7 @@ "use strict"; -class ResourceArray extends Array +export default class ResourceArray extends Array { push(value) { diff --git a/src/Data/ResourceComparisionResult.js b/src/Data/ResourceComparisionResult.js new file mode 100644 index 0000000..225bd1c --- /dev/null +++ b/src/Data/ResourceComparisionResult.js @@ -0,0 +1,7 @@ +export default // const ResourceComparisonResult = + { + Null: 0, + Distributed: 1, + Local: 2, + Same: 3 + }; diff --git a/src/Structure.js b/src/Data/Structure.js similarity index 97% rename from src/Structure.js rename to src/Data/Structure.js index 59b55f9..7bd3070 100644 --- a/src/Structure.js +++ b/src/Data/Structure.js @@ -26,7 +26,7 @@ "use strict"; -class Structure +export default class Structure { getKeys() { var rt = []; diff --git a/src/StructureArray.js b/src/Data/StructureArray.js similarity index 96% rename from src/StructureArray.js rename to src/Data/StructureArray.js index cc42145..32b9468 100644 --- a/src/StructureArray.js +++ b/src/Data/StructureArray.js @@ -26,7 +26,8 @@ "use strict"; -class StructureArray extends Array + +export default class StructureArray extends Array { push(value) { diff --git a/src/Data/StructureComparisonResult.js b/src/Data/StructureComparisonResult.js new file mode 100644 index 0000000..de2f800 --- /dev/null +++ b/src/Data/StructureComparisonResult.js @@ -0,0 +1,9 @@ + +export default //const StructureComparisonResult = +{ + Null: 0, + Structure: 1, + StructureSameKeys: 2, + StructureSameTypes: 3, + Same: 4 +}; \ No newline at end of file diff --git a/src/AsyncBag.js b/src/Engine/AsyncBag.js similarity index 96% rename from src/AsyncBag.js rename to src/Engine/AsyncBag.js index 469634b..4e9528a 100644 --- a/src/AsyncBag.js +++ b/src/Engine/AsyncBag.js @@ -25,7 +25,9 @@ "use strict"; -class AsyncBag extends AsyncReply +import AsyncReply from './AsyncReply.js'; + +export default class AsyncBag extends AsyncReply { constructor() { super(); diff --git a/src/AsyncException.js b/src/Engine/AsyncException.js similarity index 70% rename from src/AsyncException.js rename to src/Engine/AsyncException.js index ce5f81d..3433e48 100644 --- a/src/AsyncException.js +++ b/src/Engine/AsyncException.js @@ -24,39 +24,10 @@ */ "use strict"; -const ExceptionCode = -{ - HostNotReachable: 0, - AccessDenied: 1, - ResourceNotFound: 2, - AttachDenied: 3, - InvalidMethod: 4, - InvokeDenied: 5, - CreateDenied: 6, - AddParentDenied: 7, - AddChildDenied: 8, - ViewAttributeDenied: 9, - UpdateAttributeDenied: 10, - StoreNotFound: 11, - ParentNotFound: 12, - ChildNotFound: 13, - ResourceIsNotStore: 14, - DeleteDenied: 15, - DeleteFailed: 16, - UpdateAttributeFailed: 17, - GetAttributesFailed: 18, - ClearAttributesFailed: 19, - TemplateNotFound: 20, - RenameDenied: 21, - ClassNotFound: 22, - MethodNotFound: 23, - PropertyNotFound: 24, - SetPropertyDenied: 25, - ReadOnlyProperty: 26 -}; +import ExceptionCode from './ExceptionCode.js'; -class AsyncException extends Error - { +export default class AsyncException extends Error +{ constructor() { super(); diff --git a/src/AsyncQueue.js b/src/Engine/AsyncQueue.js similarity index 94% rename from src/AsyncQueue.js rename to src/Engine/AsyncQueue.js index c9fd53e..ffbdfd1 100644 --- a/src/AsyncQueue.js +++ b/src/Engine/AsyncQueue.js @@ -23,9 +23,11 @@ * Created by Ahmed Zamil on 25/07/2017. */ -"use strict"; +"use strict"; -class AsyncQueue extends AsyncReply +import AsyncReply from './AsyncReply.js'; + +export default class AsyncQueue extends AsyncReply { constructor() diff --git a/src/AsyncReply.js b/src/Engine/AsyncReply.js similarity index 93% rename from src/AsyncReply.js rename to src/Engine/AsyncReply.js index 61215f2..3b7656f 100644 --- a/src/AsyncReply.js +++ b/src/Engine/AsyncReply.js @@ -26,17 +26,19 @@ "use strict"; -const ErrorType = { +import AsyncException from './AsyncException.js'; + +export const ErrorType = { Management: 0, Exception: 1 }; -const ProgressType = { +export const ProgressType = { Execution: 0, Network: 1 }; -class AsyncReply +export default class AsyncReply { then(callback) { @@ -113,6 +115,13 @@ class AsyncReply if (this.ready) return; + if (type instanceof Exception) + { + code = type.code; + message = type.message; + type = type.type; + } + this.exception.raise(type, code, message);// = exception; for(var i = 0; i < this.errorCallbacks.length; i++) diff --git a/src/Engine/ExceptionCode.js b/src/Engine/ExceptionCode.js new file mode 100644 index 0000000..d16ae0f --- /dev/null +++ b/src/Engine/ExceptionCode.js @@ -0,0 +1,30 @@ +export default //const ExceptionCode = +{ + HostNotReachable: 0, + AccessDenied: 1, + ResourceNotFound: 2, + AttachDenied: 3, + InvalidMethod: 4, + InvokeDenied: 5, + CreateDenied: 6, + AddParentDenied: 7, + AddChildDenied: 8, + ViewAttributeDenied: 9, + UpdateAttributeDenied: 10, + StoreNotFound: 11, + ParentNotFound: 12, + ChildNotFound: 13, + ResourceIsNotStore: 14, + DeleteDenied: 15, + DeleteFailed: 16, + UpdateAttributeFailed: 17, + GetAttributesFailed: 18, + ClearAttributesFailed: 19, + TemplateNotFound: 20, + RenameDenied: 21, + ClassNotFound: 22, + MethodNotFound: 23, + PropertyNotFound: 24, + SetPropertyDenied: 25, + ReadOnlyProperty: 26 +}; \ No newline at end of file diff --git a/src/IDestructible.js b/src/Engine/IDestructible.js similarity index 92% rename from src/IDestructible.js rename to src/Engine/IDestructible.js index 54aad09..da53c4f 100644 --- a/src/IDestructible.js +++ b/src/Engine/IDestructible.js @@ -26,7 +26,9 @@ "use strict"; -class IDestructible extends IEventHandler +import IEventHandler from './IEventHandler.js'; + +export default class IDestructible extends IEventHandler { destroy() { diff --git a/src/IEventHandler.js b/src/Engine/IEventHandler.js similarity index 98% rename from src/IEventHandler.js rename to src/Engine/IEventHandler.js index 06ce833..cad3e23 100644 --- a/src/IEventHandler.js +++ b/src/Engine/IEventHandler.js @@ -25,7 +25,7 @@ */ "use strict"; -class IEventHandler +export default class IEventHandler { _register(event) { diff --git a/src/DistributedConnection.js b/src/Net/IIP/DistributedConnection.js similarity index 95% rename from src/DistributedConnection.js rename to src/Net/IIP/DistributedConnection.js index f29eb7e..2a7b5b3 100644 --- a/src/DistributedConnection.js +++ b/src/Net/IIP/DistributedConnection.js @@ -26,7 +26,23 @@ "use strict"; -class DistributedConnection extends IStore { +import IStore from '../../Resource/IStore.js'; +import Session from '../../Security/Authority/Session.js'; +import {Authentication, AuthenticationType} from '../../Security/Authority/Authentication.js'; +import IIPPacket from '../../Net/Packets/IIPPacket.js'; +import IIPAuthPacket from '../../Net/Packets/IIPAuthPacket.js'; +import SHA256 from '../../Security/Integrity/SHA256.js'; +import {BL, DC} from '../../Data/DataConverter.js'; +import SendList from '../SendList.js'; + +import AsyncReply from '../../Engine/AsyncReply.js'; +import Codec from '../../Data/Codec.js'; +import NetworkBuffer from '../Sockets/NetworkBuffer.js'; +import KeyList from '../../Data/KeyList.js'; +import AsyncQueue from '../../Engine/AsyncQueue.js'; +import Warehouse from '../../Resource/Warehouse.js'; + +export default class DistributedConnection extends IStore { send(data) { //console.log("Send", data.length); @@ -46,7 +62,7 @@ class DistributedConnection extends IStore { return rt; } - constructor(url, domain, username, password, checkInterval = 30, connectionTimeout = 600, revivingTime = 120) { + constructor() { super(); @@ -56,31 +72,12 @@ class DistributedConnection extends IStore { //this.domain = domain; //this.localUsername = username; - this._register("ready"); - this._register("error"); + //this._register("ready"); + //this._register("error"); this._register("close"); this.session = new Session(new Authentication(AuthenticationType.Client), new Authentication(AuthenticationType.Host)); - this.session.localAuthentication.domain = domain; - this.session.localAuthentication.username = username; - - this.localPassword = DC.stringToBytes(password); - - this.socket = new WebSocket(url, "iip"); - this.socket.binaryType = "arraybuffer"; - this.socket.connection = this; - this.socket.networkBuffer = new NetworkBuffer(); - - this.debug = false; - this.totalReceived = 0; - this.totalSent = 0; - - this.checkInterval = checkInterval * 1000; // check every 30 seconds - this.connectionTimeout = connectionTimeout * 1000; // 10 minutes (4 pings failed) - this.revivingTime = revivingTime * 1000; // 2 minutes - this.lastAction = Date.now(); - this.packet = new IIPPacket(); this.authPacket = new IIPAuthPacket(); @@ -107,6 +104,54 @@ class DistributedConnection extends IStore { //window.crypto.getRandomValues(this.localNonce); // declare (Credentials -> No Auth, No Enctypt) + //this.socket.onerror = function(event) + //{ + // self.close(event); + //}; + } + + + open(settings = {}) + { + + var { domain = null, + secure = false, + username = "guest", + password = "", + checkInterval = 30, + connectionTimeout = 600, + revivingTime = 120, + debug = false} = settings; + + this.openReply = new AsyncReply(); + + var hostname = this.instance.name.split("://", 2)[1].split("/", 2)[0]; + + // assign domain from hostname if not provided + domain = domain ? domain : hostname.split(":")[0]; + + this.session.localAuthentication.domain = domain; + this.session.localAuthentication.username = username; + + this.localPassword = DC.stringToBytes(password); + + var url = `ws${secure ? 's' : ''}://${hostname}`; + + + this.debug = debug; + this.totalReceived = 0; + this.totalSent = 0; + + this.checkInterval = checkInterval * 1000; // check every 30 seconds + this.connectionTimeout = connectionTimeout * 1000; // 10 minutes (4 pings failed) + this.revivingTime = revivingTime * 1000; // 2 minutes + this.lastAction = Date.now(); + + this.socket = new WebSocket(url, "iip"); + this.socket.binaryType = "arraybuffer"; + this.socket.connection = this; + this.socket.networkBuffer = new NetworkBuffer(); + var un = DC.stringToBytes(username); var dmn = DC.stringToBytes(domain); var self = this; @@ -133,16 +178,15 @@ class DistributedConnection extends IStore { this.socket.onclose = function(event) { + if (this.openReply) + this.openReply.triggerError(); + self.close(event); }; - //this.socket.onerror = function(event) - //{ - // self.close(event); - //}; + return this.openReply; } - processPacket(msg, offset, ends, data) { @@ -428,7 +472,10 @@ class DistributedConnection extends IStore { this.sendParams().addUint8(0x28).addUint8Array(this.session.id).done(); this.ready = true; - this._emit("ready", this); + + this.openReply.trigger(this); + + //this._emit("ready", this); } } } @@ -473,12 +520,16 @@ class DistributedConnection extends IStore { else if (authPacket.action == IIPAuthPacketAction.ConnectionEstablished) { this.session.id = authPacket.sessionId; this.ready = true; - this._emit("ready", this); + this.openReply.trigger(this); + + //this._emit("ready", this); } } else if (authPacket.command == IIPAuthPacketCommand.Error) { - this._emit("error", this, authPacket.errorCode, authPacket.errorMessage); + this.openReply.triggerError(1, authPacket.errorCode, authPacket.errorMessage); + + //this._emit("error", this, authPacket.errorCode, authPacket.errorMessage); this.close(); } } @@ -502,8 +553,6 @@ class DistributedConnection extends IStore { while (offset < ends) { offset = this.processPacket(msg, offset, ends, data); } - - } close(event) @@ -1071,8 +1120,21 @@ class DistributedConnection extends IStore { var rt = fi.apply(r, args); + function* itt() { + + }; - if (rt instanceof AsyncReply) { + // Is iterator ? + if (rt[Symbol.iterator] instanceof Function) + { + for (let v of rt) + self.sendChunk(callback, v); + + self.sendReply(IIPPacket.IIPPacketAction.InvokeFunctionArrayArguments, callback) + .addUint8(DataType.Void) + .done(); + } + else if (rt instanceof AsyncReply) { rt.then(function (res) { self.sendReply(IIPPacketAction.InvokeFunctionArrayArguments, callback) .addUint8Array(Codec.compose(res, self)) @@ -1151,8 +1213,17 @@ class DistributedConnection extends IStore { var rt = fi.apply(r, args); + // Is iterator ? + if (rt[Symbol.iterator] instanceof Function) + { + for (let v of rt) + self.sendChunk(callback, v); - if (rt instanceof AsyncReply) { + self.sendReply(IIPPacket.IIPPacketAction.InvokeFunctionNamedArguments, callback) + .addUint8(DataType.Void) + .done(); + } + else if (rt instanceof AsyncReply) { rt.then(function (res) { self.sendReply(IIPPacketAction.InvokeFunctionNamedArguments, callback) .addUint8Array(Codec.compose(res, self)) diff --git a/src/DistributedPropertyContext.js b/src/Net/IIP/DistributedPropertyContext.js similarity index 96% rename from src/DistributedPropertyContext.js rename to src/Net/IIP/DistributedPropertyContext.js index c72ceca..6fc71c6 100644 --- a/src/DistributedPropertyContext.js +++ b/src/Net/IIP/DistributedPropertyContext.js @@ -26,7 +26,7 @@ "use strict"; -class DistributedPropertyContext +export default class DistributedPropertyContext { constructor(p1, p2) { diff --git a/src/DistributedResource.js b/src/Net/IIP/DistributedResource.js similarity index 96% rename from src/DistributedResource.js rename to src/Net/IIP/DistributedResource.js index d68b4dd..e91701d 100644 --- a/src/DistributedResource.js +++ b/src/Net/IIP/DistributedResource.js @@ -26,7 +26,11 @@ "use strict"; -class DistributedResource extends IResource +import IResource from '../../Resource/IResource.js'; +import AsyncReply from '../../Engine/AsyncReply.js'; +import Codec from '../../Data/Codec.js'; + +export default class DistributedResource extends IResource { destroy() { diff --git a/src/DistributedResourceQueueItem.js b/src/Net/IIP/DistributedResourceQueueItem.js similarity index 93% rename from src/DistributedResourceQueueItem.js rename to src/Net/IIP/DistributedResourceQueueItem.js index 90fe38e..c84bcb4 100644 --- a/src/DistributedResourceQueueItem.js +++ b/src/Net/IIP/DistributedResourceQueueItem.js @@ -26,18 +26,17 @@ "use strict"; -const DistributedResourceQueueItemType = +export const DistributedResourceQueueItemType = { Propery: 0, Event: 1 }; -class DistributedResourceQueueItem { +export default class DistributedResourceQueueItem { constructor(resource, type, value, index) { this.resource = resource; this.index = index; this.type = type; this.value = value; } -} - +} \ No newline at end of file diff --git a/src/IIPAuthPacket.js b/src/Net/Packets/IIPAuthPacket.js similarity index 98% rename from src/IIPAuthPacket.js rename to src/Net/Packets/IIPAuthPacket.js index cc0b164..313f8a6 100644 --- a/src/IIPAuthPacket.js +++ b/src/Net/Packets/IIPAuthPacket.js @@ -26,7 +26,8 @@ "use strict"; -const IIPAuthPacketCommand = + +export const IIPAuthPacketCommand = { Action: 0, Declare: 1, @@ -34,7 +35,7 @@ const IIPAuthPacketCommand = Error: 3 }; -const IIPAuthPacketAction = +export const IIPAuthPacketAction = { // Authenticate AuthenticateHash: 0, @@ -44,7 +45,7 @@ const IIPAuthPacketAction = }; -const IIPAuthPacketMethod = +export const IIPAuthPacketMethod = { None: 0, Certificate: 1, @@ -52,7 +53,7 @@ const IIPAuthPacketMethod = Token: 3 }; -class IIPAuthPacket +export default class IIPAuthPacket { constructor() { diff --git a/src/IIPPacket.js b/src/Net/Packets/IIPPacket.js similarity index 99% rename from src/IIPPacket.js rename to src/Net/Packets/IIPPacket.js index a3f8967..012060e 100644 --- a/src/IIPPacket.js +++ b/src/Net/Packets/IIPPacket.js @@ -26,7 +26,7 @@ "use strict"; -const IIPPacketCommand = +export const IIPPacketCommand = { Event: 0, Request: 1, @@ -34,7 +34,7 @@ const IIPPacketCommand = Report: 3 }; -const IIPPacketReport = +export const IIPPacketReport = { ManagementError: 0, ExecutionError: 1, @@ -42,7 +42,7 @@ const IIPPacketReport = ChunkStream: 0x9 }; -const IIPPacketEvent = +export const IIPPacketEvent = { // Event Manage ResourceReassigned : 0, @@ -60,7 +60,7 @@ const IIPPacketEvent = }; -const IIPPacketAction = +export const IIPPacketAction = { // Request Manage AttachResource: 0, @@ -98,7 +98,7 @@ const IIPPacketAction = }; -class IIPPacket +export default class IIPPacket { constructor() { diff --git a/src/SendList.js b/src/Net/SendList.js similarity index 93% rename from src/SendList.js rename to src/Net/SendList.js index 8e03c67..ca8ee04 100644 --- a/src/SendList.js +++ b/src/Net/SendList.js @@ -26,7 +26,9 @@ "use strict"; -class SendList extends BinaryList +import BinaryList from '../Data/BinaryList.js'; + +export default class SendList extends BinaryList { constructor(connection, doneReply) { diff --git a/src/NetworkBuffer.js b/src/Net/Sockets/NetworkBuffer.js similarity index 97% rename from src/NetworkBuffer.js rename to src/Net/Sockets/NetworkBuffer.js index b674110..8f89a67 100644 --- a/src/NetworkBuffer.js +++ b/src/Net/Sockets/NetworkBuffer.js @@ -26,7 +26,9 @@ "use strict"; -class NetworkBuffer { +import DC from '../../Data/DataConverter.js'; + +export default class NetworkBuffer { constructor() { this.neededDataLength = 0; this.data = new DC(0); diff --git a/src/CustomResourceEvent.js b/src/Resource/CustomResourceEvent.js similarity index 96% rename from src/CustomResourceEvent.js rename to src/Resource/CustomResourceEvent.js index 18965f9..6ba28ff 100644 --- a/src/CustomResourceEvent.js +++ b/src/Resource/CustomResourceEvent.js @@ -26,7 +26,7 @@ "use strict"; -class CustomResourceEvent +export default class CustomResourceEvent { constructor(issuer, receivers, params) { diff --git a/src/IResource.js b/src/Resource/IResource.js similarity index 91% rename from src/IResource.js rename to src/Resource/IResource.js index 820fbf1..3f065f1 100644 --- a/src/IResource.js +++ b/src/Resource/IResource.js @@ -26,7 +26,9 @@ "use strict"; -const ResourceTrigger = +import IDestructible from '../Engine/IDestructible.js'; + +export const ResourceTrigger = { Loaded : 0, Initialize: 1, @@ -37,7 +39,7 @@ const ResourceTrigger = SystemReload: 6 }; -class IResource extends IDestructible +export default class IResource extends IDestructible { trigger(trigger) { diff --git a/src/IStore.js b/src/Resource/IStore.js similarity index 94% rename from src/IStore.js rename to src/Resource/IStore.js index 0dc869c..6c7f15d 100644 --- a/src/IStore.js +++ b/src/Resource/IStore.js @@ -26,7 +26,9 @@ "use strict"; -class IStore extends IResource { +import IResource from './IResource.js'; + +export default class IStore extends IResource { get(path) { } diff --git a/src/Instance.js b/src/Resource/Instance.js similarity index 94% rename from src/Instance.js rename to src/Resource/Instance.js index 40c3ab7..1b616b8 100644 --- a/src/Instance.js +++ b/src/Resource/Instance.js @@ -26,7 +26,17 @@ "use strict"; -class Instance extends IEventHandler +import IEventHandler from '../Engine/IEventHandler.js'; +import IPermissionsManager from '../Security/Permissions/IPermissionsManager.js'; +import StructureArray from '../Data/StructureArray.js'; +import AutoList from '../Data/AutoList.js'; +import KeyList from '../Data/KeyList.js'; +import Structure from '../Data/Structure.js'; +import PropertyValue from '../Data/PropertyValue.js'; +import CustomResourceEvent from './CustomResourceEvent.js'; +import Warehouse from './Warehouse.js'; + +export default class Instance extends IEventHandler { getAge(index) diff --git a/src/EventTemplate.js b/src/Resource/Template/EventTemplate.js similarity index 83% rename from src/EventTemplate.js rename to src/Resource/Template/EventTemplate.js index 55873c7..a4084d8 100644 --- a/src/EventTemplate.js +++ b/src/Resource/Template/EventTemplate.js @@ -26,7 +26,10 @@ "use strict"; -class EventTemplate extends MemberTemplate +import {DC, BL} from '../../Data/DataConverter.js'; +import MemberTemplate from './MemberTemplate.js'; + +export default class EventTemplate extends MemberTemplate { constructor() @@ -37,12 +40,12 @@ class EventTemplate extends MemberTemplate compose() { - var rt = new BinaryList(); + var rt = BL(); var name = super.compose(); if (this.expansion != null) { var exp = DC.stringToBytes(this.expansion); - return rt.addUint8(0x50).addUint32(exp.length).addUint8Array(exp).addUint8(name.length).addUint8Array(name).toArray(); + return rt.addUint8(0x50).addUint8(name.length).addUint8Array(name).addUint32(exp.length).addUint8Array(exp).toArray(); } else return rt.addUint8(0x40).addUint32(name.length).addUint8Array(name).toArray(); diff --git a/src/FunctionTemplate.js b/src/Resource/Template/FunctionTemplate.js similarity index 83% rename from src/FunctionTemplate.js rename to src/Resource/Template/FunctionTemplate.js index 341715b..0ecaac9 100644 --- a/src/FunctionTemplate.js +++ b/src/Resource/Template/FunctionTemplate.js @@ -26,23 +26,25 @@ "use strict"; -class FunctionTemplate extends MemberTemplate { +import {DC, BL} from '../../Data/DataConverter.js'; +import MemberTemplate from './MemberTemplate.js'; + +export default class FunctionTemplate extends MemberTemplate { compose() { var name = super.compose(); - var rt = new BinaryList(); + var rt = BL(); if (this.expansion != null) { var exp = DC.stringToBytes(this.expansion); return rt.addUint8(0x10 | (this.isVoid ? 0x8 : 0x0)) - .addUint32(exp.length).addUint8Array(exp) - .addUint8(name.length).addUint8Array(name).toArray(); + .addUint8(name.length).addUint8Array(name) + .addUint32(exp.length).addUint8Array(exp).toArray(); } else return rt.addUint8(this.isVoid ? 0x8 : 0x0).addUint8(name.length).addUint8Array(name).toArray(); } - constructor() { super(); this.type = MemberType.Function; diff --git a/src/MemberTemplate.js b/src/Resource/Template/MemberTemplate.js similarity index 91% rename from src/MemberTemplate.js rename to src/Resource/Template/MemberTemplate.js index 9e030ba..9150abe 100644 --- a/src/MemberTemplate.js +++ b/src/Resource/Template/MemberTemplate.js @@ -26,13 +26,16 @@ "use strict"; -const MemberType = { +import DC from '../../Data/DataConverter.js'; + + +export const MemberType = { Function: 0, Property: 1, Event: 2 }; -class MemberTemplate { +export default class MemberTemplate { compose() { return DC.stringToBytes(this.name); } diff --git a/src/PropertyTemplate.js b/src/Resource/Template/PropertyTemplate.js similarity index 82% rename from src/PropertyTemplate.js rename to src/Resource/Template/PropertyTemplate.js index f63c4ce..6f05d75 100644 --- a/src/PropertyTemplate.js +++ b/src/Resource/Template/PropertyTemplate.js @@ -26,13 +26,16 @@ "use strict"; -const PropertyPermission = { +import {DC, BL} from '../../Data/DataConverter.js'; +import MemberTemplate from './MemberTemplate.js'; + +export const PropertyPermission = { Read: 1, Write: 2, ReadWrite: 3 }; -class PropertyTemplate extends MemberTemplate +export default class PropertyTemplate extends MemberTemplate { constructor() @@ -44,7 +47,7 @@ class PropertyTemplate extends MemberTemplate compose() { var name = super.compose(); - var rt = new BinaryList(); + var rt = BL(); var pv = (this.permission >> 1) | (this.recordable ? 1 : 0); if (this.writeExpansion != null && this.readExpansion != null) @@ -52,34 +55,38 @@ class PropertyTemplate extends MemberTemplate var rexp = DC.stringToBytes(this.readExpansion); var wexp = DC.stringToBytes(this.writeExpansion); return rt.addUint8(0x38 | pv) + .addUint8(name.length) + .addUint8Array(name) .addUint32(wexp.length) .addUint8Array(wexp) .addUint32(rexp.length) .addUint8Array(rexp) - .addUint8(name.length) - .addUint8Array(name).toArray(); + .toArray(); } else if (this.writeExpansion != null) { var wexp = DC.stringToBytes(this.writeExpansion); return rt.addUint8(0x30 | pv) + .addUint8(name.length) + .addUint8Array(name) .addUint32(wexp.length) .addUint8Array(wexp) - .addUint8(name.length) - .addUint8Array(name).toArray(); + .toArray(); } else if (this.readExpansion != null) { var rexp = DC.stringToBytes(this.readExpansion); return rt.addUint8(0x28 | pv) + .addUint8(name.length) + .addUint8Array(name) .addUint32(rexp.length) .addUint8Array(rexp) - .addUint8(name.length) - .addUint8Array(name).toArray(); + .toArray(); } else return rt.addUint8(0x20 | pv) .addUint32(name.length) - .addUint8Array(name).toArray(); + .addUint8Array(name) + .toArray(); } } diff --git a/src/ResourceTemplate.js b/src/Resource/Template/ResourceTemplate.js similarity index 96% rename from src/ResourceTemplate.js rename to src/Resource/Template/ResourceTemplate.js index 1c43873..5e35758 100644 --- a/src/ResourceTemplate.js +++ b/src/Resource/Template/ResourceTemplate.js @@ -20,9 +20,15 @@ * SOFTWARE. */ -"use strict"; +"use strict"; -class ResourceTemplate { +import FunctionTemplate from './FunctionTemplate.js'; +import PropertyTemplate from './PropertyTemplate.js'; +import EventTemplate from './EventTemplate.js'; +import SHA256 from '../../Security/Integrity/SHA256.js'; +import {DC, BL} from '../../Data/DataConverter.js'; + +export default class ResourceTemplate { getEventTemplateByName(eventName) { for (var i = 0; i < this.events.length; i++) @@ -141,7 +147,7 @@ class ResourceTemplate { this.members.push(this.properties[i]); // bake it binarily - var b = new BinaryList(); + var b = BL(); var cls = DC.stringToBytes(this.className); b.addUint8Array(this.classId.value) .addUint8(cls.length).addUint8Array(cls).addUint32(template.version).addUint16(this.members.length); diff --git a/src/Warehouse.js b/src/Resource/Warehouse.js similarity index 54% rename from src/Warehouse.js rename to src/Resource/Warehouse.js index 2bb7b47..43b65e5 100644 --- a/src/Warehouse.js +++ b/src/Resource/Warehouse.js @@ -26,22 +26,45 @@ "use strict"; +import AsyncReply from '../Engine/AsyncReply.js'; +import ResourceTemplate from '../Resource/Template/ResourceTemplate.js'; +import IEventHandler from '../Engine/IEventHandler.js'; +import AutoList from '../Data/AutoList.js'; +import KeyList from '../Data/KeyList.js'; +import DistributedConnection from '../Net/IIP/DistributedConnection.js'; +import MemoryStore from '../Stores/MemoryStore.js'; +import Instance from '../Resource/Instance.js'; +import IStore from './IStore.js'; -class Warehouse + +export class WH extends IEventHandler { - static new(type, name, store = null, parent = null, manager = null) + constructor() { - var res = type(); - Warehouse.put(res, name, store, parent, null, 0, manager); + super(); + + this.stores = new AutoList(); + this.resources = new KeyList(); + this.resourceCounter = 0; + this.templates = new KeyList(); + this.protocols = new KeyList(); + this._register("connected"); + this._register("disconnected"); + } + + new(type, name, store = null, parent = null, manager = null) + { + var res = new type(); + this.put(res, name, store, parent, null, 0, manager); return res; } - static get(id) + get(id, settings) { if (Number.isInteger(id)) { //if (Warehouse.resources.contains(id)) - return new AsyncReply(Warehouse.resources.item(id)); + return new AsyncReply(this.resources.item(id)); //else // return null; } @@ -78,29 +101,66 @@ class Warehouse } } + // Should we create a new store ? + if (id.includes("://")) + { + var url = id.split("://", 2); + var hostname = url[1].split("/", 2)[0]; + var pathname = url[1].split("/").splice(1).join("/"); + var handler; + + var rt = new AsyncReply(); + var self = this; + + if (handler = this.protocols.item(url[0])) + { + var store = this.new(handler, url[0] + "://" + hostname); + store.open(settings).then(x=>{ + if (success) + { + if (pathname.length > 0 && pathname[1] != "") + store.get(pathname[1]).then(r=>{ + rt.trigger(r); + }).error(e => rt.triggerError(e)); + else + rt.trigger(store); + } + else + { + self.remove(store); + } + }).error(e => { + rt.triggerError(e); + self.remove(store); + }); + } + + return rt; + } + return new AsyncReply(null); } } - static remove(resource) + remove(resource) { - if (Warehouse.resources.contains(resource.instance.id)) - Warehouse.resources.remove(resource.instance.id); + if (this.resources.contains(resource.instance.id)) + this.resources.remove(resource.instance.id); else return false; if (resource instanceof IStore) { - Warehouse.stores.remove(resource); + this.stores.remove(resource); // remove all objects associated with the store var toBeRemoved = null; - for (var i = 0; i < Warehouse.resources.length; i++) + for (var i = 0; i < this.resources.length; i++) { - var o = Warehouse.resources.at(i); + var o = this.resources.at(i); if (o.instance.store == resource) { if (toBeRemoved == null) @@ -111,7 +171,9 @@ class Warehouse if (toBeRemoved != null) for(var i = 0; i < toBeRemoved.length; i++) - Warehouse.remove(toBeRemoved[i]); + this.remove(toBeRemoved[i]); + + this._emit("disconnected", resource); } if (resource.instance.store != null) @@ -121,8 +183,8 @@ class Warehouse return true; } - static put(resource, name, store, parent, customTemplate = null, age = 0, manager = null){ - resource.instance = new Instance(Warehouse.resourceCounter++, name, resource, store, customTemplate, age); + put(resource, name, store, parent, customTemplate = null, age = 0, manager = null){ + resource.instance = new Instance(this.resourceCounter++, name, resource, store, customTemplate, age); //resource.instance.children.on("add", Warehouse._onChildrenAdd).on("remove", Warehouse._onChildrenRemove); //resource.instance.parents.on("add", Warehouse._onParentsAdd).on("remove", Warehouse._onParentsRemove); @@ -140,71 +202,74 @@ class Warehouse } if (resource instanceof IStore) - Warehouse.stores.add(resource); + { + this.stores.add(resource); + this._emit("connected", resource); + } else store.put(resource); - Warehouse.resources.add(resource.instance.id, resource); + this.resources.add(resource.instance.id, resource); } - static _onParentsRemove(value) + _onParentsRemove(value) { if (value.instance.children.contains(value)) value.instance.children.remove(value); } - static _onParentsAdd(value) + _onParentsAdd(value) { if (!value.instance.children.contains(value)) value.instance.children.add(value); } - static _onChildrenRemove(value) + _onChildrenRemove(value) { if (value.instance.parents.contains(value)) value.instance.parents.remove(value); } - static _onChildrenAdd(value) + _onChildrenAdd(value) { if (!value.instance.parents.contains(value)) value.instance.parents.add(value); } - static putTemplate(template) + putTemplate(template) { - Warehouse.templates.add(template.classId.valueOf(), template); + this.templates.add(template.classId.valueOf(), template); } - static getTemplateByType(type) + getTemplateByType(type) { // loaded ? - for (var i = 0; i < Warehouse.templates.length; i++) - if (Warehouse.templates.at(i).className == typeof(type)) - return Warehouse.templates.at(i); + for (var i = 0; i < this.templates.length; i++) + if (this.templates.at(i).className == typeof(type)) + return this.templates.at(i); var template = new ResourceTemplate(type); - Warehouse.templates.add(template.classId.valueOf(), template); + this.templates.add(template.classId.valueOf(), template); return template; } - static getTemplateByClassId(classId) + getTemplateByClassId(classId) { - var template = Warehouse.templates.item(classId); + var template = this.templates.item(classId); return new AsyncReply(template); } - static getTemplateByClassName(className) + getTemplateByClassName(className) { - for(var i = 0; i < Warehouse.templates.length; i++) - if (Warehouse.templates.at(i).className == className) - return new AsyncReply(Warehouse.templates.at(i)); + for(var i = 0; i < this.templates.length; i++) + if (this.templates.at(i).className == className) + return new AsyncReply(this.templates.at(i)); return new AsyncReply(null); } - static _qureyIn(path, index, resources) + _qureyIn(path, index, resources) { var rt = []; @@ -221,20 +286,22 @@ class Warehouse else for(var i = 0; i < resources.length; i++) if (resources.at(i).instance.name == path[index]) - rt = rt.concat(Warehouse._qureyIn(path, index+1, resources.at(i).instance.children)); + rt = rt.concat(this._qureyIn(path, index+1, resources.at(i).instance.children)); return rt; } - static query(path) + query(path) { var p = path.split('/'); - return new AsyncReply(Warehouse._qureyIn(p, 0, Warehouse.stores)); + return new AsyncReply(this._qureyIn(p, 0, this.stores)); } } -// Initialize -Warehouse.stores = new AutoList(); -Warehouse.resources = new KeyList(); -Warehouse.resourceCounter = 0; -Warehouse.templates = new KeyList(); +let Warehouse = new WH(); + +Warehouse.protocols.add("iip", DistributedConnection); +Warehouse.protocols.add("mem", MemoryStore); + +export default Warehouse; + diff --git a/src/Authentication.js b/src/Security/Authority/Authentication.js similarity index 93% rename from src/Authentication.js rename to src/Security/Authority/Authentication.js index b93f46b..396c253 100644 --- a/src/Authentication.js +++ b/src/Security/Authority/Authentication.js @@ -26,14 +26,14 @@ "use strict"; - const AuthenticationType = { + export const AuthenticationType = { Host: 0, CoHost: 1, Client: 2, Alien: 3 }; - class Authentication + export default class Authentication { constructor(type) { @@ -48,3 +48,5 @@ return this.domain + "@" + this.username; } } + +export {Authentication}; \ No newline at end of file diff --git a/src/Session.js b/src/Security/Authority/Session.js similarity index 98% rename from src/Session.js rename to src/Security/Authority/Session.js index e204bdd..6c1f9c2 100644 --- a/src/Session.js +++ b/src/Security/Authority/Session.js @@ -27,7 +27,7 @@ "use strict"; -class Session +export default class Session { constructor(localAuthentication, remoteAuthentication) { diff --git a/src/SHA256.js b/src/Security/Integrity/SHA256.js similarity index 98% rename from src/SHA256.js rename to src/Security/Integrity/SHA256.js index 8f2182c..c259b33 100644 --- a/src/SHA256.js +++ b/src/Security/Integrity/SHA256.js @@ -26,7 +26,9 @@ * Ref: https://en.wikipedia.org/wiki/SHA-2 */ -class SHA256 +import {DC, BL} from '../../Data/DataConverter.js'; + +export default class SHA256 { static RROT(n, d) @@ -167,7 +169,7 @@ class SHA256 // Produce the final hash value (big-endian): //digest := hash := h0 append h1 append h2 append h3 append h4 append h5 append h6 append h7 - var results = new BinaryList(); + var results = BL(); for(var i = 0; i < 8; i++) results.addUint32(hash[i]); diff --git a/src/IPermissionsManager.js b/src/Security/Permissions/IPermissionsManager.js similarity index 95% rename from src/IPermissionsManager.js rename to src/Security/Permissions/IPermissionsManager.js index 8097811..00d4fb6 100644 --- a/src/IPermissionsManager.js +++ b/src/Security/Permissions/IPermissionsManager.js @@ -26,7 +26,7 @@ "use strict"; -const ActionType = +export const ActionType = { Attach: 0, Delete: 1, @@ -44,13 +44,13 @@ const ActionType = ReceiveEvent: 13 }; -const Ruling = { +export const Ruling = { Denied: 0, Allowed: 1, DontCare: 2, }; -class IPermissionsManager +export default class IPermissionsManager { /// /// Check for permission. diff --git a/src/MemoryStore.js b/src/Stores/MemoryStore.js similarity index 95% rename from src/MemoryStore.js rename to src/Stores/MemoryStore.js index 5f491a3..0eec7e1 100644 --- a/src/MemoryStore.js +++ b/src/Stores/MemoryStore.js @@ -26,7 +26,9 @@ "use strict"; -class MemoryStore extends IStore +import IStore from '../Resource/IStore.js' + +export default class MemoryStore extends IStore { constructor() { diff --git a/src/esiur.js b/src/esiur.js new file mode 100644 index 0000000..8adb2ce --- /dev/null +++ b/src/esiur.js @@ -0,0 +1,2 @@ +import wh from './Resource/Warehouse.js'; +export default wh; \ No newline at end of file diff --git a/test/test-debug.html b/test/test-debug.html index 0f23918..c922b87 100644 --- a/test/test-debug.html +++ b/test/test-debug.html @@ -1,42 +1,10 @@ - - + + - + \ No newline at end of file diff --git a/test/test.js b/test/test.js new file mode 100644 index 0000000..4f65bc5 --- /dev/null +++ b/test/test.js @@ -0,0 +1,41 @@ +var demo; + +import IStore from '../src/Resource/IStore.js'; +import wh from '../src/Resource/Warehouse.js'; + +class MyStore extends IStore +{ + +} + + + +wh.get("iip://localhost:5001/db/my").then(x=>{ + console.log("connected", x); +}).error(x=>{ + console.log("error", x); +}); + +/* +var con = new DistributedConnection("ws://localhost:5001/iip/system/iip", "localhost", "demo", "1234"); +Warehouse.put(con, "remote"); + +con.on("ready", function (d) { + con.get("db/my").then(function(rt){ + console.log("Object received."); + demo = rt; + rt.on("LevelUp", function(a, b, c){ + console.log("LevelUp", a, b, c); + }); + + rt.Add(3); + + rt.Divide({nominator: 10, denominator: 50}).then(x=>{ + console.log(x); + }); + + }); +}).on("error", function(sender, code, msg){ + console.log(sender, code, msg); +}); +*/ \ No newline at end of file