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 AsyncReply from "../../src/Core/AsyncReply.js";
import DistributedServer from "../../src/Net/IIP/DistributedServer.js"; import DistributedServer from "../../src/Net/IIP/DistributedServer.js";
import IMembership from "../../src/Security/Membership/IMembership.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 MemoryStore from "../../src/Stores/MemoryStore.js";
import DC from "../../src/Data/DataConverter.js"; import DC from "../../src/Data/DataConverter.js";
import IResource from "../../src/Resource/IResource.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) wss.on('connection', function connection(ws)
{ {
let con = server.add(); let con = server.add();
con.assign(new WSSocket(ws)); con.assign(new WSocket(ws));
con.on("ready", (x)=>{ con.on("ready", (x)=>{
chat._emit("login", x.session.remoteAuthentication.username); chat._emit("login", x.session.remoteAuthentication.username);
}).on("close", (x)=>{ }).on("close", (x)=>{

View File

@ -4,7 +4,7 @@ import { createRequire } from 'module'
import AsyncReply from "../../src/Core/AsyncReply.js"; import AsyncReply from "../../src/Core/AsyncReply.js";
import DistributedServer from "../../src/Net/IIP/DistributedServer.js"; import DistributedServer from "../../src/Net/IIP/DistributedServer.js";
import IMembership from "../../src/Security/Membership/IMembership.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 MemoryStore from "../../src/Stores/MemoryStore.js";
import DC from "../../src/Data/DataConverter.js"; import DC from "../../src/Data/DataConverter.js";
import IResource from "../../src/Resource/IResource.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", "name": "esiur",
"version": "1.7.1", "version": "1.7.2",
"description": "Distributed Object Framework", "description": "Distributed Object Framework",
"main": "esiur.js", "main": "esiur.js",
"type": "module", "type": "module",
@ -27,6 +27,7 @@
"@babel/core": "^7.14.6", "@babel/core": "^7.14.6",
"@babel/preset-env": "^7.14.5", "@babel/preset-env": "^7.14.5",
"babelify": "^10.0.0", "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 RecordComparisonResult from './RecordComparisonResult.js';
import IRecord from './IRecord.js'; import IRecord from './IRecord.js';
import Record from './Record.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 { export default class Codec {
@ -49,7 +55,7 @@ export default class Codec {
var size; var size;
var reply = new AsyncReply(); //var reply = new AsyncReply();
var isArray; var isArray;
var t; var t;
@ -205,8 +211,8 @@ export default class Codec {
} }
} }
// @TODO: Throw exception
return null; return new AsyncReply(null);
} }
static parseResource(data, offset) { static parseResource(data, offset) {
@ -243,7 +249,30 @@ export default class Codec {
var end = offset + length; 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; var previous = null;
@ -490,7 +519,7 @@ export default class Codec {
while (contentLength > 0) { while (contentLength > 0) {
typelist.push(data[offset]); typelist.push(data[offset]);
var rt = {}; let rt = {};
bag.add(Codec.parse(data, offset, rt, connection)); bag.add(Codec.parse(data, offset, rt, connection));
contentLength -= rt.size; contentLength -= rt.size;
offset += rt.size; offset += rt.size;
@ -498,14 +527,14 @@ export default class Codec {
} }
else { else {
for (var i = 0; i < keys.length; i++) { for (let i = 0; i < keys.length; i++) {
keylist.push(keys[i]); keylist.push(keys[i]);
typelist.push(types[i]); typelist.push(types[i]);
} }
var i = 0; let i = 0;
while (contentLength > 0) { while (contentLength > 0) {
var rt = {}; let rt = {};
bag.add(Codec.parse(data, offset, rt, connection, types[i])); bag.add(Codec.parse(data, offset, rt, connection, types[i]));
contentLength -= rt.size; contentLength -= rt.size;
offset += rt.size; offset += rt.size;
@ -634,18 +663,18 @@ export default class Codec {
} }
static composeStructure(value, connection, includeKeys = true, includeTypes = true, prependLength = false) { 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) { if (includeKeys) {
for (var i = 0; i < keys.length; i++) { for (let i = 0; i < keys.length; i++) {
var key = DC.stringToBytes(keys[i]); let key = DC.stringToBytes(keys[i]);
rt.addUint8(key.length).addUint8Array(key).addUint8Array(Codec.compose(value[keys[i]], connection)); rt.addUint8(key.length).addUint8Array(key).addUint8Array(Codec.compose(value[keys[i]], connection));
} }
} }
else { 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)); rt.addUint8Array(Codec.compose(value[keys[i]], connection, includeTypes));
} }
@ -759,7 +788,7 @@ export default class Codec {
else if (result == RecordComparisonResult.Record else if (result == RecordComparisonResult.Record
|| result == RecordComparisonResult.RecordSameType) || result == RecordComparisonResult.RecordSameType)
{ {
var cs = data.getUint32(offset); let cs = data.getUint32(offset);
offset += 4; offset += 4;
previous = Codec.parseRecord(data, offset, cs, connection, classId); previous = Codec.parseRecord(data, offset, cs, connection, classId);
offset += cs; offset += cs;
@ -774,15 +803,15 @@ export default class Codec {
} }
else else
{ {
var previous = null; let previous = null;
var classId = null; let classId = null;
if (result == RecordComparisonResult.Null) if (result == RecordComparisonResult.Null)
previous = new AsyncReply(null); previous = new AsyncReply(null);
else if (result == RecordComparisonResult.Record) else if (result == RecordComparisonResult.Record)
{ {
var cs = data.getUint32(offset); let cs = data.getUint32(offset);
var recordLength = cs - 16; let recordLength = cs - 16;
offset += 4; offset += 4;
classId = data.getGuid(offset); classId = data.getGuid(offset);
offset += 16; offset += 16;
@ -802,8 +831,8 @@ export default class Codec {
previous = new AsyncReply(null); previous = new AsyncReply(null);
else if (result == RecordComparisonResult.Record) else if (result == RecordComparisonResult.Record)
{ {
var cs = data.getUint32(offset); let cs = data.getUint32(offset);
var recordLength = cs - 16; let recordLength = cs - 16;
offset += 4; offset += 4;
classId = data.getGuid(offset); classId = data.getGuid(offset);
offset += 16; offset += 16;
@ -812,9 +841,9 @@ export default class Codec {
} }
else if (result == RecordComparisonResult.RecordSameType) else if (result == RecordComparisonResult.RecordSameType)
{ {
var cs = data.getUint32(offset); let cs = data.getUint32(offset);
offset += 4; offset += 4;
previous = ParseRecord(data, offset, cs, connection, classId); previous = this.parseRecord(data, offset, cs, connection, classId);
offset += cs; offset += cs;
} }
else if (result == RecordComparisonResult.Same) else if (result == RecordComparisonResult.Same)
@ -915,17 +944,17 @@ export default class Codec {
{ {
if (template.definedType != null) if (template.definedType != null)
{ {
var record = new template.definedType(); let record = new template.definedType();
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]; record[template.properties[i].name] = ar[i];
reply.trigger(record); reply.trigger(record);
} }
else 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]; record[template.properties[i].name] = ar[i];
reply.trigger(record); reply.trigger(record);
@ -1019,14 +1048,14 @@ export default class Codec {
var previousKeys = previous.getKeys(); var previousKeys = previous.getKeys();
var nextKeys = next.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]) if (previousKeys[i] != nextKeys[i])
return StructureComparisonResult.Structure; return StructureComparisonResult.Structure;
var previousTypes = Codec.getStructureDateTypes(previous, connection); var previousTypes = Codec.getStructureDateTypes(previous, connection);
var nextTypes = Codec.getStructureDateTypes(next, 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]) if (previousTypes[i] != nextTypes[i])
return StructureComparisonResult.StructureSameKeys; return StructureComparisonResult.StructureSameKeys;
@ -1153,7 +1182,6 @@ static getDataType(value, connection) {
// float or double // float or double
return DataType.Float64; return DataType.Float64;
} }
break;
case "string": case "string":
return DataType.String; return DataType.String;
@ -1199,8 +1227,6 @@ static getDataType(value, connection) {
return DataType.Void return DataType.Void
} }
break;
default: default:
return DataType.Void; return DataType.Void;
} }
@ -1256,21 +1282,21 @@ static getDataType(value, connection) {
previous = new AsyncReply(null); previous = new AsyncReply(null);
else if (result == StructureComparisonResult.Structure) else if (result == StructureComparisonResult.Structure)
{ {
var cs = data.getUint32(offset); let cs = data.getUint32(offset);
offset += 4; offset += 4;
previous = Codec.parseStructure(data, offset, cs, connection, metadata); previous = Codec.parseStructure(data, offset, cs, connection, metadata);
offset += cs; offset += cs;
} }
else if (result == StructureComparisonResult.StructureSameKeys) else if (result == StructureComparisonResult.StructureSameKeys)
{ {
var cs = data.getUint32(offset); let cs = data.getUint32(offset);
offset += 4; offset += 4;
previous = Codec.parseStructure(data, offset, cs, connection, metadata, metadata.keys); previous = Codec.parseStructure(data, offset, cs, connection, metadata, metadata.keys);
offset += cs; offset += cs;
} }
else if (result == StructureComparisonResult.StructureSameTypes) else if (result == StructureComparisonResult.StructureSameTypes)
{ {
var cs = data.getUint32(offset); let cs = data.getUint32(offset);
offset += 4; offset += 4;
previous = Codec.parseStructure(data, offset, cs, connection, metadata, metadata.keys, metadata.types); previous = Codec.parseStructure(data, offset, cs, connection, metadata, metadata.keys, metadata.types);
offset += cs; offset += cs;

View File

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

View File

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

View File

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

View File

@ -32,6 +32,8 @@ import TemplateDataType from "./TemplateDataType.js";
import IResource from '../IResource.js'; import IResource from '../IResource.js';
import IRecord from '../../Data/IRecord.js'; import IRecord from '../../Data/IRecord.js';
import TemplateType from './TemplateType.js' import TemplateType from './TemplateType.js'
import Warehouse from '../Warehouse.js';
import DistributedConnection from '../../Net/IIP/DistributedConnection.js';
export default class TypeTemplate { export default class TypeTemplate {
@ -95,12 +97,12 @@ export default class TypeTemplate {
static getTypeGuid(type) { 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) static getTypeGuidByName(typeName)
{ {
return SHA256.compute(DC.stringToBytes(this.className)).getGuid(0); return SHA256.compute(DC.stringToBytes(typeName)).getGuid(0);
} }
@ -119,11 +121,11 @@ export default class TypeTemplate {
return; return;
// functions // 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 (frtt != null)
{ {
if (!bag.includes(frtt)) 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 (fpt != null)
{ {
if (!bag.includes(fpt)) if (!bag.includes(fpt))
@ -154,7 +156,7 @@ export default class TypeTemplate {
var last = args[args.length - 1]; var last = args[args.length - 1];
if (last.parameterType == DistributedConnection) if (last.parameterType == DistributedConnection)
{ {
var fpt = Warehouse.getTemplateByType(last.parameterType); let fpt = Warehouse.getTemplateByType(last.parameterType);
if (fpt != null) if (fpt != null)
{ {
if (!bag.includes(fpt)) if (!bag.includes(fpt))
@ -169,7 +171,7 @@ export default class TypeTemplate {
} }
// properties // 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 p = tmp.properties[i];
var pt = Warehouse.getTemplateByType(p.propertyInfo.propertyType); var pt = Warehouse.getTemplateByType(p.propertyInfo.propertyType);
@ -184,7 +186,7 @@ export default class TypeTemplate {
} }
// events // 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 e = tmp.events[i];
var et = Warehouse.getTemplateByType(e.eventInfo.eventHandlerType); var et = Warehouse.getTemplateByType(e.eventInfo.eventHandlerType);
@ -204,6 +206,10 @@ export default class TypeTemplate {
return list; return list;
} }
get type() {
return this.templateType;
}
constructor(type, addToWarehouse) { constructor(type, addToWarehouse) {
@ -257,7 +263,7 @@ export default class TypeTemplate {
if (template.events != null) 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: ""}] // [name, type, {listenable: true/false, help: ""}]
var ei = template.events[i]; var ei = template.events[i];
@ -274,7 +280,7 @@ export default class TypeTemplate {
if (template.functions != null) 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]; var fi = template.functions[i];
@ -298,13 +304,13 @@ export default class TypeTemplate {
// append signals // 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]); this.members.push(this.events[i]);
// append slots // 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]); this.members.push(this.functions[i]);
// append properties // 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]); this.members.push(this.properties[i]);
// bake it binarily // bake it binarily
@ -317,13 +323,13 @@ export default class TypeTemplate {
.addUint32(template.version) .addUint32(template.version)
.addUint16(this.members.length); .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()); 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()); 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()); b.addUint8Array(this.events[i].compose());
this.content = b.toArray(); this.content = b.toArray();
@ -331,7 +337,8 @@ export default class TypeTemplate {
static getFunctionParameters(func) 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 ARGUMENT_NAMES = /([^\s,]+)/g;
var fnStr = func.toString().replace(STRIP_COMMENTS, ''); var fnStr = func.toString().replace(STRIP_COMMENTS, '');
@ -354,9 +361,8 @@ export default class TypeTemplate {
if (contentLength == -1) if (contentLength == -1)
contentLength = data.length; contentLength = data.length;
var ends = offset + contentLength; //var ends = offset + contentLength;
//var oOffset = offset;
var oOffset = offset;
// start parsing... // start parsing...
@ -385,16 +391,16 @@ export default class TypeTemplate {
if (type == 0) // function if (type == 0) // function
{ {
var ft = new FunctionTemplate(); let ft = new FunctionTemplate();
ft.index = functionIndex++; 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); ft.name = data.getString(offset, len);
offset += len; offset += len;
// return type // return type
var {size, value: returnType} = TemplateDataType.parse(data, offset); let {size, value: returnType} = TemplateDataType.parse(data, offset);
offset += size; offset += size;
ft.returnType = returnType; ft.returnType = returnType;
@ -405,9 +411,9 @@ export default class TypeTemplate {
for (var a = 0; a < argsCount; a++) 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); args.push(argType);
offset += size; offset += argSize;
} }
ft.arguments = args; ft.arguments = args;
@ -425,17 +431,17 @@ export default class TypeTemplate {
else if (type == 1) // property else if (type == 1) // property
{ {
var pt = new PropertyTemplate(); let pt = new PropertyTemplate();
pt.index = propertyIndex++; pt.index = propertyIndex++;
var hasReadExpansion = ((data.getUint8(offset) & 0x8) == 0x8); let hasReadExpansion = ((data.getUint8(offset) & 0x8) == 0x8);
var hasWriteExpansion = ((data.getUint8(offset) & 0x10) == 0x10); let hasWriteExpansion = ((data.getUint8(offset) & 0x10) == 0x10);
pt.recordable = ((data.getUint8(offset) & 1) == 1); pt.recordable = ((data.getUint8(offset) & 1) == 1);
pt.permission = ((data.getUint8(offset++) >> 1) & 0x3); pt.permission = ((data.getUint8(offset++) >> 1) & 0x3);
var len = data.getUint8(offset++); let len = data.getUint8(offset++);
pt.name = data.getString(offset, len); pt.name = data.getString(offset, len);
offset += len; offset += len;
var {size, value: valueType} = TemplateDataType.parse(data, offset); let {size, value: valueType} = TemplateDataType.parse(data, offset);
offset += size; offset += size;
@ -443,7 +449,7 @@ export default class TypeTemplate {
if (hasReadExpansion) // expansion ? if (hasReadExpansion) // expansion ?
{ {
var cs = data.getUint32(offset); let cs = data.getUint32(offset);
offset += 4; offset += 4;
pt.readExpansion = data.getString(offset, cs); pt.readExpansion = data.getString(offset, cs);
offset += cs; offset += cs;
@ -451,7 +457,7 @@ export default class TypeTemplate {
if (hasWriteExpansion) // expansion ? if (hasWriteExpansion) // expansion ?
{ {
var cs = data.getUint32(offset); let cs = data.getUint32(offset);
offset += 4; offset += 4;
pt.writeExpansion = data.getString(offset, cs); pt.writeExpansion = data.getString(offset, cs);
offset += cs; offset += cs;
@ -461,23 +467,23 @@ export default class TypeTemplate {
} }
else if (type == 2) // Event else if (type == 2) // Event
{ {
var et = new EventTemplate(); let et = new EventTemplate();
et.index = eventIndex++; et.index = eventIndex++;
var hasExpansion = ((data.getUint8(offset) & 0x10) == 0x10); let hasExpansion = ((data.getUint8(offset) & 0x10) == 0x10);
et.listenable = ((data.getUint8(offset++) & 0x8) == 0x8); et.listenable = ((data.getUint8(offset++) & 0x8) == 0x8);
var len = data.getUint8(offset++); let len = data.getUint8(offset++);
et.name = data.getString(offset, len); et.name = data.getString(offset, len);
offset += len; offset += len;
var {size, value: argType} = TemplateDataType.parse(data, offset); let {size, value: argType} = TemplateDataType.parse(data, offset);
offset += size; offset += size;
et.argumentType = argType; et.argumentType = argType;
if (hasExpansion) // expansion ? if (hasExpansion) // expansion ?
{ {
var cs = data.getUint32(offset); let cs = data.getUint32(offset);
offset += 4; offset += 4;
et.expansion = data.getString(offset, cs); et.expansion = data.getString(offset, cs);
offset += cs; offset += cs;
@ -489,13 +495,13 @@ export default class TypeTemplate {
} }
// append signals // 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]); od.members.push(od.events[i]);
// append slots // 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]); od.members.push(od.functions[i]);
// append properties // 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]); 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 AsyncBag from '../Core/AsyncBag.js';
import IRecord from '../Data/IRecord.js'; import IRecord from '../Data/IRecord.js';
import TemplateType from './Template/TemplateType.js'; import TemplateType from './Template/TemplateType.js';
import DistributedResource from '../Net/IIP/DistributedResource.js';
export class WH extends IEventHandler export class WH extends IEventHandler
{ {
@ -62,7 +63,9 @@ export class WH extends IEventHandler
this._register("connected"); this._register("connected");
this._register("disconnected"); this._register("disconnected");
///this._urlRegex = /^(?:([\S]*):\/\/([^\/]*)\/?)/; ///this._urlRegex = /^(?:([\S]*):\/\/([^\/]*)\/?)/;
this._urlRegex = /^(?:([^\s|:]*):\/\/([^\/]*)\/?)/; // this._urlRegex = /^(?:([^\s|:]*):\/\/([^\/]*)\/?)/;
this._urlRegex = /^(?:([^\s|:]*):\/\/([^/]*)\/?)/;
} }
newInstance(type, properties) newInstance(type, properties)
@ -80,6 +83,9 @@ export class WH extends IEventHandler
var res = new proxyType(); var res = new proxyType();
if (properties != null)
Object.assign(res, properties);
if (properties != null) if (properties != null)
Object.assign(res, properties); Object.assign(res, properties);
@ -88,7 +94,7 @@ export class WH extends IEventHandler
var rt = new AsyncReply(); var rt = new AsyncReply();
this.put(name, res, store, parent, null, 0, manager, attributes) this.put(name, res, store, parent, null, 0, manager, attributes)
.then((ok)=>rt.trigger(res)) .then(()=>rt.trigger(res))
.error((ex)=>rt.triggerError(ex)); .error((ex)=>rt.triggerError(ex));
return rt; return rt;
@ -104,10 +110,10 @@ export class WH extends IEventHandler
return new AsyncReply(this.resources.item(id)); 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 rt = new AsyncReply();
var self = this; // var self = this;
// Should we create a new store ? // Should we create a new store ?
if (path.match(this._urlRegex)) if (path.match(this._urlRegex))
@ -134,7 +140,7 @@ export class WH extends IEventHandler
{ {
if (!this.warehouseIsOpen) if (!this.warehouseIsOpen)
{ {
this.open().then((ok)=>{ this.open().then(()=>{
initResource(); initResource();
}).error(ex=>rt.triggerError(ex)); }).error(ex=>rt.triggerError(ex));
} }
@ -186,7 +192,7 @@ export class WH extends IEventHandler
} }
if (toBeRemoved != null) if (toBeRemoved != null)
for(var i = 0; i < toBeRemoved.length; i++) for(let i = 0; i < toBeRemoved.length; i++)
this.remove(toBeRemoved[i]); this.remove(toBeRemoved[i]);
this._emit("disconnected", resource); this._emit("disconnected", resource);
@ -231,9 +237,9 @@ export class WH extends IEventHandler
if (self.warehouseIsOpen) if (self.warehouseIsOpen)
{ {
resource.trigger(ResourceTrigger.Initialize).then(x=>{ resource.trigger(ResourceTrigger.Initialize).then(()=>{
if (resource instanceof IStore) 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) self._emit("connected", resource)
}).error(ex => { }).error(ex => {
Warehouse.remove(resource); Warehouse.remove(resource);
@ -261,7 +267,7 @@ export class WH extends IEventHandler
initResource(); initResource();
} }
else else
store.put(resource).then(ok=>{ store.put(resource).then(()=>{
initResource(); initResource();
}).error(ex=> { }).error(ex=> {
// failed to put // failed to put
@ -347,21 +353,21 @@ export class WH extends IEventHandler
if (templateType == TemplateType.Unspecified) if (templateType == TemplateType.Unspecified)
{ {
// look in resources // look in resources
var template = templates.get(TemplateType.Resource).get(classId); var template = this.templates.get(TemplateType.Resource).get(classId);
if (template != null) if (template != null)
return template; return template;
// look in records // look in records
template = templates.get(TemplateType.Record).get(classId); template = this.templates.get(TemplateType.Record).get(classId);
if (template != null) if (template != null)
return template; return template;
// look in wrappers // look in wrappers
template = templates.get(TemplateType.Wrapper).get(classId); template = this.templates.get(TemplateType.Wrapper).get(classId);
return template; return template;
} }
else else
return templates.get(templateType).get(classId); return this.templates.get(templateType).get(classId);
} }
getTemplateByClassName(className, templateType = TemplateType.Unspecified) getTemplateByClassName(className, templateType = TemplateType.Unspecified)
@ -369,22 +375,22 @@ export class WH extends IEventHandler
if (templateType == TemplateType.Unspecified) if (templateType == TemplateType.Unspecified)
{ {
// look in resources // 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) if (template != null)
return template; return template;
// look in records // 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) if (template != null)
return template; return template;
// look in wrappers // 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; return template;
} }
else 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 (index == path.length - 1)
{ {
if (path[index] == "") if (path[index] == "")
for(var i = 0; i < resources.length; i++) for(let i = 0; i < resources.length; i++)
rt.push(resources.at(i)); rt.push(resources.at(i));
else 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]) if (resources.at(i).instance.name == path[index])
rt.push(resources.at(i)); rt.push(resources.at(i));
} }
else 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]) if (resources.at(i).instance.name == path[index])
rt = rt.concat(this._qureyIn(path, index+1, resources.at(i).instance.children)); 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 => { initBag.then(ar => {
for(var i = 0; i < ar.length; i++) for(let i = 0; i < ar.length; i++)
if (!ar[i]) if (!ar[i])
console.log(`Resource failed at Initialize ${self.resources.at(i).instance.name} [${self.resources.at(i).instance.template.className}]`); console.log(`Resource failed at Initialize ${self.resources.at(i).instance.name} [${self.resources.at(i).instance.template.className}]`);
var sysBag = new AsyncBag(); 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); var r = this.resources.at(i);
sysBag.add(r.trigger(ResourceTrigger.SystemInitialized)); sysBag.add(r.trigger(ResourceTrigger.SystemInitialized));