2
0
mirror of https://github.com/esiur/esiur-js.git synced 2025-05-06 12:32:58 +00:00
This commit is contained in:
Ahmed Zamil 2021-08-12 03:11:59 +03:00
parent ba4d841aa5
commit 8eb67ae4fb
11 changed files with 961 additions and 117 deletions

14
.eslintrc.cjs Normal file
View File

@ -0,0 +1,14 @@
module.exports = {
"env": {
"browser": true,
"es2021": true,
"node": true
},
"extends": "eslint:recommended",
"parserOptions": {
"ecmaVersion": 12,
"sourceType": "module"
},
"rules": {
}
};

View File

@ -4,7 +4,7 @@ import { createRequire } from 'module'
import AsyncReply from "../../src/Core/AsyncReply.js";
import DistributedServer from "../../src/Net/IIP/DistributedServer.js";
import IMembership from "../../src/Security/Membership/IMembership.js";
import WSSocket from "../../src/Net/Sockets/WSSocket.js";
import WSocket from "../../src/Net/Sockets/WSocket.js";
import MemoryStore from "../../src/Stores/MemoryStore.js";
import DC from "../../src/Data/DataConverter.js";
import IResource from "../../src/Resource/IResource.js";
@ -72,7 +72,7 @@ server = await Warehouse.new(DistributedServer, "dss", sys, null, null, {members
wss.on('connection', function connection(ws)
{
let con = server.add();
con.assign(new WSSocket(ws));
con.assign(new WSocket(ws));
con.on("ready", (x)=>{
chat._emit("login", x.session.remoteAuthentication.username);
}).on("close", (x)=>{

View File

@ -4,7 +4,7 @@ import { createRequire } from 'module'
import AsyncReply from "../../src/Core/AsyncReply.js";
import DistributedServer from "../../src/Net/IIP/DistributedServer.js";
import IMembership from "../../src/Security/Membership/IMembership.js";
import WSSocket from "../../src/Net/Sockets/WSSocket.js";
import WSocket from "../../src/Net/Sockets/WSocket.js";
import MemoryStore from "../../src/Stores/MemoryStore.js";
import DC from "../../src/Data/DataConverter.js";
import IResource from "../../src/Resource/IResource.js";

792
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "esiur",
"version": "1.7.1",
"version": "1.7.2",
"description": "Distributed Object Framework",
"main": "esiur.js",
"type": "module",
@ -27,6 +27,7 @@
"@babel/core": "^7.14.6",
"@babel/preset-env": "^7.14.5",
"babelify": "^10.0.0",
"browserify": "^17.0.0"
"browserify": "^17.0.0",
"eslint": "^7.31.0"
}
}

View File

@ -42,6 +42,12 @@ import IResource from '../Resource/IResource.js';
import RecordComparisonResult from './RecordComparisonResult.js';
import IRecord from './IRecord.js';
import Record from './Record.js';
import ResourceArrayType from './ResourceArrayType.js';
import Warehouse from '../Resource/Warehouse.js';
import TemplateType from '../Resource/Template/TemplateType.js';
import NotModified from './NotModified.js';
import KeyList from './KeyList.js';
import StructureArray from './StructureArray.js';
export default class Codec {
@ -49,7 +55,7 @@ export default class Codec {
var size;
var reply = new AsyncReply();
//var reply = new AsyncReply();
var isArray;
var t;
@ -205,8 +211,8 @@ export default class Codec {
}
}
return null;
// @TODO: Throw exception
return new AsyncReply(null);
}
static parseResource(data, offset) {
@ -243,7 +249,30 @@ export default class Codec {
var end = offset + length;
//
var result = data[offset++];
//var result = data[offset++];
var type = data[offset] & 0xF0;
var result = data[offset++] & 0xF;
if (type == ResourceArrayType.Wrapper)
{
let classId = data.getGuid(offset);
offset += 16;
let tmp = Warehouse.getTemplateByClassId(classId, TemplateType.Resource);
// not mine, look if the type is elsewhere
if (tmp == null)
Warehouse.getTemplateByClassId(classId, TemplateType.Wrapper);
reply.arrayType = tmp?.definedType;
}
else if (type == ResourceArrayType.Static)
{
let classId = data.getGuid(offset);
offset += 16;
let tmp = Warehouse.getTemplateByClassId(classId, TemplateType.Wrapper);
reply.arrayType = tmp?.definedType;
}
var previous = null;
@ -490,7 +519,7 @@ export default class Codec {
while (contentLength > 0) {
typelist.push(data[offset]);
var rt = {};
let rt = {};
bag.add(Codec.parse(data, offset, rt, connection));
contentLength -= rt.size;
offset += rt.size;
@ -498,14 +527,14 @@ export default class Codec {
}
else {
for (var i = 0; i < keys.length; i++) {
for (let i = 0; i < keys.length; i++) {
keylist.push(keys[i]);
typelist.push(types[i]);
}
var i = 0;
let i = 0;
while (contentLength > 0) {
var rt = {};
let rt = {};
bag.add(Codec.parse(data, offset, rt, connection, types[i]));
contentLength -= rt.size;
offset += rt.size;
@ -634,18 +663,18 @@ export default class Codec {
}
static composeStructure(value, connection, includeKeys = true, includeTypes = true, prependLength = false) {
var rt = new BinaryList();
let rt = new BinaryList();
var keys = value.getKeys();
let keys = value.getKeys();
if (includeKeys) {
for (var i = 0; i < keys.length; i++) {
var key = DC.stringToBytes(keys[i]);
for (let i = 0; i < keys.length; i++) {
let key = DC.stringToBytes(keys[i]);
rt.addUint8(key.length).addUint8Array(key).addUint8Array(Codec.compose(value[keys[i]], connection));
}
}
else {
for (var i = 0; i < keys.length; i++)
for (let i = 0; i < keys.length; i++)
rt.addUint8Array(Codec.compose(value[keys[i]], connection, includeTypes));
}
@ -759,7 +788,7 @@ export default class Codec {
else if (result == RecordComparisonResult.Record
|| result == RecordComparisonResult.RecordSameType)
{
var cs = data.getUint32(offset);
let cs = data.getUint32(offset);
offset += 4;
previous = Codec.parseRecord(data, offset, cs, connection, classId);
offset += cs;
@ -774,15 +803,15 @@ export default class Codec {
}
else
{
var previous = null;
var classId = null;
let previous = null;
let classId = null;
if (result == RecordComparisonResult.Null)
previous = new AsyncReply(null);
else if (result == RecordComparisonResult.Record)
{
var cs = data.getUint32(offset);
var recordLength = cs - 16;
let cs = data.getUint32(offset);
let recordLength = cs - 16;
offset += 4;
classId = data.getGuid(offset);
offset += 16;
@ -802,8 +831,8 @@ export default class Codec {
previous = new AsyncReply(null);
else if (result == RecordComparisonResult.Record)
{
var cs = data.getUint32(offset);
var recordLength = cs - 16;
let cs = data.getUint32(offset);
let recordLength = cs - 16;
offset += 4;
classId = data.getGuid(offset);
offset += 16;
@ -812,9 +841,9 @@ export default class Codec {
}
else if (result == RecordComparisonResult.RecordSameType)
{
var cs = data.getUint32(offset);
let cs = data.getUint32(offset);
offset += 4;
previous = ParseRecord(data, offset, cs, connection, classId);
previous = this.parseRecord(data, offset, cs, connection, classId);
offset += cs;
}
else if (result == RecordComparisonResult.Same)
@ -915,17 +944,17 @@ export default class Codec {
{
if (template.definedType != null)
{
var record = new template.definedType();
for (var i = 0; i < template.properties.length; i++)
let record = new template.definedType();
for (let i = 0; i < template.properties.length; i++)
record[template.properties[i].name] = ar[i];
reply.trigger(record);
}
else
{
var record = new Record();
let record = new Record();
for (var i = 0; i < template.properties.Length; i++)
for (let i = 0; i < template.properties.Length; i++)
record[template.properties[i].name] = ar[i];
reply.trigger(record);
@ -1019,14 +1048,14 @@ export default class Codec {
var previousKeys = previous.getKeys();
var nextKeys = next.getKeys();
for (var i = 0; i < previousKeys.length; i++)
for (let i = 0; i < previousKeys.length; i++)
if (previousKeys[i] != nextKeys[i])
return StructureComparisonResult.Structure;
var previousTypes = Codec.getStructureDateTypes(previous, connection);
var nextTypes = Codec.getStructureDateTypes(next, connection);
for (var i = 0; i < previousTypes.length; i++)
for (let i = 0; i < previousTypes.length; i++)
if (previousTypes[i] != nextTypes[i])
return StructureComparisonResult.StructureSameKeys;
@ -1153,7 +1182,6 @@ static getDataType(value, connection) {
// float or double
return DataType.Float64;
}
break;
case "string":
return DataType.String;
@ -1199,8 +1227,6 @@ static getDataType(value, connection) {
return DataType.Void
}
break;
default:
return DataType.Void;
}
@ -1256,21 +1282,21 @@ static getDataType(value, connection) {
previous = new AsyncReply(null);
else if (result == StructureComparisonResult.Structure)
{
var cs = data.getUint32(offset);
let cs = data.getUint32(offset);
offset += 4;
previous = Codec.parseStructure(data, offset, cs, connection, metadata);
offset += cs;
}
else if (result == StructureComparisonResult.StructureSameKeys)
{
var cs = data.getUint32(offset);
let cs = data.getUint32(offset);
offset += 4;
previous = Codec.parseStructure(data, offset, cs, connection, metadata, metadata.keys);
offset += cs;
}
else if (result == StructureComparisonResult.StructureSameTypes)
{
var cs = data.getUint32(offset);
let cs = data.getUint32(offset);
offset += 4;
previous = Codec.parseStructure(data, offset, cs, connection, metadata, metadata.keys, metadata.types);
offset += cs;

View File

@ -1,6 +1,6 @@
export default
{
Dynamic = 0x0,
Static = 0x10,
Wrapper = 0x20
Dynamic: 0x0,
Static: 0x10,
Wrapper: 0x20
};

View File

@ -69,12 +69,13 @@ import { ResourceTrigger } from '../../Resource/IResource.js';
import Ruling from '../../Security/Permissions/Ruling.js';
import ActionType from '../../Security/Permissions/ActionType.js';
import AsyncException from '../../Core/AsyncException.js';
import WSSocket from '../Sockets/WSSocket.js';
import WSocket from '../Sockets/WSocket.js';
import ClientAuthentication from "../../Security/Authority/ClientAuthentication.js";
import HostAuthentication from "../../Security/Authority/HostAuthentication.js";
import SocketState from "../Sockets/SocketState.js";
import TemplateType from '../../Resource/Template/TemplateType.js';
import AsyncBag from '../../Core/AsyncBag.js';
export default class DistributedConnection extends IStore {
@ -1010,7 +1011,7 @@ export default class DistributedConnection extends IStore {
}
else
{
return this.connect(AuthenticationMethod.None, null, address, port, null, 0, null, domain);
return this.connect(AuthenticationMethod.None, null, address, port, null, 0, null, domain, secure);
}
}
@ -1043,7 +1044,7 @@ export default class DistributedConnection extends IStore {
throw new AsyncException(ErrorType.Exception, 0, "Session not initialized");
if (socket == null)
socket = new WSSocket();// TCPSocket();
socket = new WSocket();// TCPSocket();
if (port > 0)
this._port = port;
@ -2847,7 +2848,7 @@ export default class DistributedConnection extends IStore {
.addUint32(resource._p.instanceId)
.done()
.then(function (d) {
Codec.parseResourceArray(d, 0, d.length, this).then(function (resources) {
Codec.parseResourceArray(d, 0, d.length, self).then(function (resources) {
rt.trigger(resources);
}).error(function (ex) { rt.triggerError(ex); });
});
@ -2893,7 +2894,7 @@ export default class DistributedConnection extends IStore {
.addUint32(resource._p.instanceId)
.addUint8Array(Codec.composeStructure(attributes, this, true, true, true))
.done()
.then(function (ar) {
.then(function () {
rt.trigger(true);
}).error(function (ex) { rt.triggerError(ex); });

View File

@ -5,7 +5,7 @@ import ISocket from "./ISocket.js";
import SocketState from "./SocketState.js";
import NetworkBuffer from "../NetworkBuffer.js";
export default class WSSocket extends ISocket
export default class WSocket extends ISocket
{
//SocketState State { get; }
//INetworkReceiver<ISocket> Receiver { get; set; }
@ -37,7 +37,7 @@ export default class WSSocket extends ISocket
this.receiveNetworkBuffer = null;
this.receiver = null;
thsi.ws = null;
this.ws = null;
this._emit("destroy");
}

View File

@ -32,6 +32,8 @@ import TemplateDataType from "./TemplateDataType.js";
import IResource from '../IResource.js';
import IRecord from '../../Data/IRecord.js';
import TemplateType from './TemplateType.js'
import Warehouse from '../Warehouse.js';
import DistributedConnection from '../../Net/IIP/DistributedConnection.js';
export default class TypeTemplate {
@ -95,13 +97,13 @@ export default class TypeTemplate {
static getTypeGuid(type) {
return getTypeGuidByName(type.template.namespace + "." + type.prototype.constructor.name);
return this.getTypeGuidByName(type.template.namespace + "." + type.prototype.constructor.name);
}
static getTypeGuidByName(typeName)
{
return SHA256.compute(DC.stringToBytes(this.className)).getGuid(0);
}
return SHA256.compute(DC.stringToBytes(typeName)).getGuid(0);
}
static getDependencies(template)
@ -119,11 +121,11 @@ export default class TypeTemplate {
return;
// functions
for(var i = 0; i < tmp.functions.length; i++)
for(let i = 0; i < tmp.functions.length; i++)
{
f = tmp.functions[i];
let ft = tmp.functions[i];
var frtt = Warehouse.getTemplateByType(f.methodInfo.returnType);
var frtt = Warehouse.getTemplateByType(ft.methodInfo.returnType);
if (frtt != null)
{
if (!bag.includes(frtt))
@ -133,11 +135,11 @@ export default class TypeTemplate {
}
}
var args = f.methodInfo.parameters;
var args = ft.methodInfo.parameters;
for(var i = 0; i < args.length - 1; i++)
for(let j = 0; j < args.length - 1; j++)
{
var fpt = Warehouse.getTemplateByType(args[i].parameterType);
var fpt = Warehouse.getTemplateByType(args[j].parameterType);
if (fpt != null)
{
if (!bag.includes(fpt))
@ -154,7 +156,7 @@ export default class TypeTemplate {
var last = args[args.length - 1];
if (last.parameterType == DistributedConnection)
{
var fpt = Warehouse.getTemplateByType(last.parameterType);
let fpt = Warehouse.getTemplateByType(last.parameterType);
if (fpt != null)
{
if (!bag.includes(fpt))
@ -169,7 +171,7 @@ export default class TypeTemplate {
}
// properties
for (var i = 0; i < tmp.properties.length; i++)
for (let i = 0; i < tmp.properties.length; i++)
{
var p = tmp.properties[i];
var pt = Warehouse.getTemplateByType(p.propertyInfo.propertyType);
@ -184,7 +186,7 @@ export default class TypeTemplate {
}
// events
for(var i = 0; i < tmp.events.length; i++)
for(let i = 0; i < tmp.events.length; i++)
{
var e = tmp.events[i];
var et = Warehouse.getTemplateByType(e.eventInfo.eventHandlerType);
@ -204,6 +206,10 @@ export default class TypeTemplate {
return list;
}
get type() {
return this.templateType;
}
constructor(type, addToWarehouse) {
@ -257,7 +263,7 @@ export default class TypeTemplate {
if (template.events != null)
{
for (var i = 0; i < template.events.length; i++) {
for (let i = 0; i < template.events.length; i++) {
// [name, type, {listenable: true/false, help: ""}]
var ei = template.events[i];
@ -274,7 +280,7 @@ export default class TypeTemplate {
if (template.functions != null)
{
for (var i = 0; i < template.functions.length; i++) {
for (let i = 0; i < template.functions.length; i++) {
var fi = template.functions[i];
@ -298,13 +304,13 @@ export default class TypeTemplate {
// append signals
for (var i = 0; i < this.events.length; i++)
for (let i = 0; i < this.events.length; i++)
this.members.push(this.events[i]);
// append slots
for (var i = 0; i < this.functions.length; i++)
for (let i = 0; i < this.functions.length; i++)
this.members.push(this.functions[i]);
// append properties
for (var i = 0; i < this.properties.length; i++)
for (let i = 0; i < this.properties.length; i++)
this.members.push(this.properties[i]);
// bake it binarily
@ -317,13 +323,13 @@ export default class TypeTemplate {
.addUint32(template.version)
.addUint16(this.members.length);
for (var i = 0; i < this.functions.length; i++)
for (let i = 0; i < this.functions.length; i++)
b.addUint8Array(this.functions[i].compose());
for (var i = 0; i < this.properties.length; i++)
for (let i = 0; i < this.properties.length; i++)
b.addUint8Array(this.properties[i].compose());
for (var i = 0; i < this.events.length; i++)
for (let i = 0; i < this.events.length; i++)
b.addUint8Array(this.events[i].compose());
this.content = b.toArray();
@ -331,7 +337,8 @@ export default class TypeTemplate {
static getFunctionParameters(func)
{
var STRIP_COMMENTS = /(\/\/.*$)|(\/\*[\s\S]*?\*\/)|(\s*=[^,\)]*(('(?:\\'|[^'\r\n])*')|("(?:\\"|[^"\r\n])*"))|(\s*=[^,\)]*))/mg;
var STRIP_COMMENTS = /(\/\/.*$)|(\/\*[\s\S]*?\*\/)|(\s*=[^,)]*(('(?:\\'|[^'\r\n])*')|("(?:\\"|[^"\r\n])*"))|(\s*=[^,)]*))/mg;
//var STRIP_COMMENTS = /(\/\/.*$)|(\/\*[\s\S]*?\*\/)|(\s*=[^,\)]*(('(?:\\'|[^'\r\n])*')|("(?:\\"|[^"\r\n])*"))|(\s*=[^,\)]*))/mg;
var ARGUMENT_NAMES = /([^\s,]+)/g;
var fnStr = func.toString().replace(STRIP_COMMENTS, '');
@ -354,9 +361,8 @@ export default class TypeTemplate {
if (contentLength == -1)
contentLength = data.length;
var ends = offset + contentLength;
var oOffset = offset;
//var ends = offset + contentLength;
//var oOffset = offset;
// start parsing...
@ -385,16 +391,16 @@ export default class TypeTemplate {
if (type == 0) // function
{
var ft = new FunctionTemplate();
let ft = new FunctionTemplate();
ft.index = functionIndex++;
var hasExpansion = ((data.getUint8(offset++) & 0x10) == 0x10);
let hasExpansion = ((data.getUint8(offset++) & 0x10) == 0x10);
var len = data.getUint8(offset++);
let len = data.getUint8(offset++);
ft.name = data.getString(offset, len);
offset += len;
// return type
var {size, value: returnType} = TemplateDataType.parse(data, offset);
let {size, value: returnType} = TemplateDataType.parse(data, offset);
offset += size;
ft.returnType = returnType;
@ -405,9 +411,9 @@ export default class TypeTemplate {
for (var a = 0; a < argsCount; a++)
{
var {size, value: argType} = ArgumentTemplate.parse(data, offset);
let {size: argSize, value: argType} = ArgumentTemplate.parse(data, offset);
args.push(argType);
offset += size;
offset += argSize;
}
ft.arguments = args;
@ -425,17 +431,17 @@ export default class TypeTemplate {
else if (type == 1) // property
{
var pt = new PropertyTemplate();
let pt = new PropertyTemplate();
pt.index = propertyIndex++;
var hasReadExpansion = ((data.getUint8(offset) & 0x8) == 0x8);
var hasWriteExpansion = ((data.getUint8(offset) & 0x10) == 0x10);
let hasReadExpansion = ((data.getUint8(offset) & 0x8) == 0x8);
let hasWriteExpansion = ((data.getUint8(offset) & 0x10) == 0x10);
pt.recordable = ((data.getUint8(offset) & 1) == 1);
pt.permission = ((data.getUint8(offset++) >> 1) & 0x3);
var len = data.getUint8(offset++);
let len = data.getUint8(offset++);
pt.name = data.getString(offset, len);
offset += len;
var {size, value: valueType} = TemplateDataType.parse(data, offset);
let {size, value: valueType} = TemplateDataType.parse(data, offset);
offset += size;
@ -443,7 +449,7 @@ export default class TypeTemplate {
if (hasReadExpansion) // expansion ?
{
var cs = data.getUint32(offset);
let cs = data.getUint32(offset);
offset += 4;
pt.readExpansion = data.getString(offset, cs);
offset += cs;
@ -451,7 +457,7 @@ export default class TypeTemplate {
if (hasWriteExpansion) // expansion ?
{
var cs = data.getUint32(offset);
let cs = data.getUint32(offset);
offset += 4;
pt.writeExpansion = data.getString(offset, cs);
offset += cs;
@ -461,23 +467,23 @@ export default class TypeTemplate {
}
else if (type == 2) // Event
{
var et = new EventTemplate();
let et = new EventTemplate();
et.index = eventIndex++;
var hasExpansion = ((data.getUint8(offset) & 0x10) == 0x10);
let hasExpansion = ((data.getUint8(offset) & 0x10) == 0x10);
et.listenable = ((data.getUint8(offset++) & 0x8) == 0x8);
var len = data.getUint8(offset++);
let len = data.getUint8(offset++);
et.name = data.getString(offset, len);
offset += len;
var {size, value: argType} = TemplateDataType.parse(data, offset);
let {size, value: argType} = TemplateDataType.parse(data, offset);
offset += size;
et.argumentType = argType;
if (hasExpansion) // expansion ?
{
var cs = data.getUint32(offset);
let cs = data.getUint32(offset);
offset += 4;
et.expansion = data.getString(offset, cs);
offset += cs;
@ -489,13 +495,13 @@ export default class TypeTemplate {
}
// append signals
for (var i = 0; i < od.events.length; i++)
for (let i = 0; i < od.events.length; i++)
od.members.push(od.events[i]);
// append slots
for (var i = 0; i < od.functions.length; i++)
for (let i = 0; i < od.functions.length; i++)
od.members.push(od.functions[i]);
// append properties
for (var i = 0; i < od.properties.length; i++)
for (let i = 0; i < od.properties.length; i++)
od.members.push(od.properties[i]);

View File

@ -41,6 +41,7 @@ import ResourceProxy from '../Proxy/ResourceProxy.js';
import AsyncBag from '../Core/AsyncBag.js';
import IRecord from '../Data/IRecord.js';
import TemplateType from './Template/TemplateType.js';
import DistributedResource from '../Net/IIP/DistributedResource.js';
export class WH extends IEventHandler
{
@ -62,7 +63,9 @@ export class WH extends IEventHandler
this._register("connected");
this._register("disconnected");
///this._urlRegex = /^(?:([\S]*):\/\/([^\/]*)\/?)/;
this._urlRegex = /^(?:([^\s|:]*):\/\/([^\/]*)\/?)/;
// this._urlRegex = /^(?:([^\s|:]*):\/\/([^\/]*)\/?)/;
this._urlRegex = /^(?:([^\s|:]*):\/\/([^/]*)\/?)/;
}
newInstance(type, properties)
@ -80,6 +83,9 @@ export class WH extends IEventHandler
var res = new proxyType();
if (properties != null)
Object.assign(res, properties);
if (properties != null)
Object.assign(res, properties);
@ -88,7 +94,7 @@ export class WH extends IEventHandler
var rt = new AsyncReply();
this.put(name, res, store, parent, null, 0, manager, attributes)
.then((ok)=>rt.trigger(res))
.then(()=>rt.trigger(res))
.error((ex)=>rt.triggerError(ex));
return rt;
@ -104,10 +110,10 @@ export class WH extends IEventHandler
return new AsyncReply(this.resources.item(id));
}
get(path, attributes = null, parent = null, manager = null)
get(path, attributes = null)//, parent = null, manager = null)
{
var rt = new AsyncReply();
var self = this;
// var self = this;
// Should we create a new store ?
if (path.match(this._urlRegex))
@ -134,7 +140,7 @@ export class WH extends IEventHandler
{
if (!this.warehouseIsOpen)
{
this.open().then((ok)=>{
this.open().then(()=>{
initResource();
}).error(ex=>rt.triggerError(ex));
}
@ -186,7 +192,7 @@ export class WH extends IEventHandler
}
if (toBeRemoved != null)
for(var i = 0; i < toBeRemoved.length; i++)
for(let i = 0; i < toBeRemoved.length; i++)
this.remove(toBeRemoved[i]);
this._emit("disconnected", resource);
@ -231,9 +237,9 @@ export class WH extends IEventHandler
if (self.warehouseIsOpen)
{
resource.trigger(ResourceTrigger.Initialize).then(x=>{
resource.trigger(ResourceTrigger.Initialize).then(()=>{
if (resource instanceof IStore)
resource.trigger(ResourceTrigger.Open).then(y=>{ rt.trigger(true);
resource.trigger(ResourceTrigger.Open).then(()=>{ rt.trigger(true);
self._emit("connected", resource)
}).error(ex => {
Warehouse.remove(resource);
@ -261,7 +267,7 @@ export class WH extends IEventHandler
initResource();
}
else
store.put(resource).then(ok=>{
store.put(resource).then(()=>{
initResource();
}).error(ex=> {
// failed to put
@ -347,21 +353,21 @@ export class WH extends IEventHandler
if (templateType == TemplateType.Unspecified)
{
// look in resources
var template = templates.get(TemplateType.Resource).get(classId);
var template = this.templates.get(TemplateType.Resource).get(classId);
if (template != null)
return template;
// look in records
template = templates.get(TemplateType.Record).get(classId);
template = this.templates.get(TemplateType.Record).get(classId);
if (template != null)
return template;
// look in wrappers
template = templates.get(TemplateType.Wrapper).get(classId);
template = this.templates.get(TemplateType.Wrapper).get(classId);
return template;
}
else
return templates.get(templateType).get(classId);
return this.templates.get(templateType).get(classId);
}
getTemplateByClassName(className, templateType = TemplateType.Unspecified)
@ -369,22 +375,22 @@ export class WH extends IEventHandler
if (templateType == TemplateType.Unspecified)
{
// look in resources
var template = templates[TemplateType.Resource].values.find(x => x.className == className);
var template = this.templates.get(TemplateType.Resource).values.find(x => x.className == className);
if (template != null)
return template;
// look in records
template = templates[TemplateType.Record].values.find(x => x.className == className);
template = this.templates.get(TemplateType.Record).values.find(x => x.className == className);
if (template != null)
return template;
// look in wrappers
template = templates[TemplateType.Wrapper].values.find(x => x.className == className);
template = this.templates.get(TemplateType.Wrapper).values.find(x => x.className == className);
return template;
}
else
{
return templates[templateType].values.find(x => x.className == className);
return this.templates.get(templateType).values.find(x => x.className == className);
}
}
@ -395,15 +401,15 @@ export class WH extends IEventHandler
if (index == path.length - 1)
{
if (path[index] == "")
for(var i = 0; i < resources.length; i++)
for(let i = 0; i < resources.length; i++)
rt.push(resources.at(i));
else
for(var i = 0; i < resources.length; i++)
for(let i = 0; i < resources.length; i++)
if (resources.at(i).instance.name == path[index])
rt.push(resources.at(i));
}
else
for(var i = 0; i < resources.length; i++)
for(let i = 0; i < resources.length; i++)
if (resources.at(i).instance.name == path[index])
rt = rt.concat(this._qureyIn(path, index+1, resources.at(i).instance.children));
@ -488,13 +494,13 @@ export class WH extends IEventHandler
initBag.then(ar => {
for(var i = 0; i < ar.length; i++)
for(let i = 0; i < ar.length; i++)
if (!ar[i])
console.log(`Resource failed at Initialize ${self.resources.at(i).instance.name} [${self.resources.at(i).instance.template.className}]`);
var sysBag = new AsyncBag();
for (var i = 0; i < this.resources.length; i++)
for (let i = 0; i < this.resources.length; i++)
{
var r = this.resources.at(i);
sysBag.add(r.trigger(ResourceTrigger.SystemInitialized));